[解決済み] "入力引数が 'double' 型の場合、未定義の関数 'function_name' が存在します"
質問
形は違えど、よく出てくる質問があります。次のようなエラーメッセージが表示されるのですが、なぜですか?
入力引数が 'double' 型の場合、未定義の関数 'function_name'があります。
この記事では、このエラーメッセージが発生する可能性のあるさまざまなシナリオを取り上げ、解決方法を提案しようと思います。
解決方法は?
このエラーメッセージに遭遇し、その意味がわからなくなった場合。これで安心してください。90%の人が同じフレーズをググったことがあるのです。
<ブロッククオート入力引数が 'double' 型の場合、未定義の関数 'int'があります。
このエラーメッセージは非常にわかりやすいものですが、それでも混乱を招く可能性があります。(私は
'int'
をランダムに使用することもできます。
'train', 'table', 'my_function'
または他の何か)。
このエラーが発生するケースは、主に2つあります。
- まだ存在しない関数を使おうとしている。
- 存在しない変数内の要素にアクセスしようとしています。
このエラーが出たらどうするのですか?
まず、次のことを試してみてください。
which
. これは、使おうとしている関数や変数が定義されているかどうかを教えてくれるものです。
which int
'int' not found.
明らかなように,Matlabは関数や変数の名前に
int
. したがって、これを使おうとしても無駄です。では、次のように比較してみましょう。
max
:
which max
built-in (C:\Program Files\MATLAB\R2014b\toolbox\matlab\datafun\@logical\max) % logical method
しかし、"Undefined function 'x' ..."と表示されても、次のように表示されることがあります。その場合は、以下のポイント3を参照してください。
which x
x is a variable.
1. しかし、関数 "int" は存在するのです! それは、さらに ドキュメント !?
はい。
int
は存在しますが、それは
シンボリックツールボックス
. ツールボックスは別途購入する必要がある追加パッケージなので(かなり高価)、そのパッケージを持っていない可能性があります。
Undefined function"のエラーが出たが、ドキュメントにその関数がある場合、左のメニューから探すか、単にアドレスを確認してください。標準的なMatlabの関数は以下のようなアドレスを持っています。
mathworks.com/help/matlab/ref/max.html
^^^^^^
matlab"の部分に注目してください。もしこれが見えたら、あなたはMatlabのコアの一部である関数を使用していることになります。
一方、以下のようなアドレスが表示された場合、使用しようとしている関数はSymbolic Toolboxに含まれています。
mathworks.com/help/symbolic/int.html
^^^^^^^^
あるいは、Neural Network Toolboxの一部かもしれません。
mathworks.com/help/nnet/ref/train.html
^^^^
解決策 あなたが持っていないツールボックスの一部ではない別の関数を見つける。あなたが熟練したググラーであれば、探しているものが見つかる可能性があります。もし見つからない場合は、助けを求めてください。何を試したか説明し、努力したことを示しましょう。
2. しかし、この関数は の文書があります。 そして、Matlabのコアに含まれています。
ある関数がMatlabの標準的なインストールに含まれていて、よく文書化されていても、このエラーが発生することがあります。このエラーの最も可能性の高い原因は、Matlabの古いバージョンを使用していることです。ドキュメントを確認すると、ページの下の方に以下のように記載されています。
<ブロッククオートR2013b で導入されました。
つまり、R2012bを使用している場合、例えば、以下のような使い方はできません。
table
.
解決策
お使いのMatlabのバージョンで、その関数が定義されているかどうか確認してください。もしまだ実装されていないなら、Matlabをアップデートするか、他の方法を見つける必要があります。代替案として
table
は、例えばセルや構造体を使用することができます。
3. しかし、変数 "my_variable" は存在するのです! 上の行で作りました!
いいえ、そうではありません。あなたが作成した変数
myvariable
,
my_Variable
,
my_Variable
のようなものを上の行に書いてください。また、作成したはいいが、誤って
cleared
を使用します。
解決策 コードに目を通す。タイプミスや、誤って変数をクリアしてしまったところなどを探してみてください。Matlabエディタでは、変数をマークすると下の方に次の行が表示されます: "3 usages of "x" found" if you have defined and used the function.変数をマークすると、下の方に次の行が表示されます: "3 usages of "x" found" if you have defined and used the function. また、未使用の変数の下にはオレンジ色の線が表示されます。
4. しかし、次のように入力すると、 "y is a variable" が表示されます。
which y
?
上記のエラーが発生した場合 "未定義の関数 'y'ですが
which
は、次のように伝えます。
y
が存在する場合、エラーメッセージにはさらに数行が含まれます。
my_function(x)
Undefined function or variable 'y'.
Error in my_function (line 2)
t = x*y;
>> which y
y is a variable.
このことからわかるのは、変数に
y
の中にある
Matlabワークスペース
(また
このリンク
).
問題は、関数がこのワークスペースにアクセスできないことです。
関数は基本ワークスペースを使用しません。すべての関数は、独自の関数ワークスペースを持っています。
関数で変数を見て使用したい場合、その変数を 引数 . こうすることで、その変数はその関数のローカルワークスペースの一部となります。同様に、関数の内部で作成した変数に関数の外部からもアクセスできるようにしたい場合は、関数からの出力として用意する必要があります。
解決策 使用する関数に入力引数として使用したい変数を渡します。関数内の名前は内部的に矛盾がないようにすること。つまり、関数全体で同じ名前でなければなりません。関数の外側と内側の変数名には何の関連性もないことに注意してください。
5. しかし、関数の入力として変数を渡しますが、それでも同じエラーメッセージが表示されます!?
はい、おそらく変数を入力として使用しているのでしょう。しかし、異なる関数で変数名が同じとは限りません(ほとんどの場合、そうではありません)。
という関数があったとします。
function output = my_function(x)
output = 2*y;
end
を使っているのに、以下のコードのようにワークスペースから呼び出すと、上記と同じエラーが発生します。
y
を入力変数として使用し
y
を関数内で使用します。
y = 3;
res = my_function(y)
これは、関数内部で
my_function
の場合、入力として使用する変数が
x
のように、関数の外側でどのように呼ばれていたかに関係なく。
解決策 関数のヘッダーで入力変数名を変更するか、関数全体で変数名を変更します。
6. しかし、私が作成した
x
をグローバル変数にするのか!?
まず最初に。グローバル変数を使わないことをお勧めします。引数として変数を渡す方がはるかに良い。
として変数を宣言するだけでは十分ではありません。
グローバル
をMatlabのワークスペースに追加しました。それを使用するすべての関数で宣言しなければなりません.したがって,もしグローバル変数
x
を実行する必要があります。
global x
をすべての関数で使用します。
解決策
コードを書き直し、グローバル変数を使用する代わりに変数を引数として渡します。それができない場合は
global x
を使用しているすべての関数で使用します。
この回答に加えて、公式の Matlab FAQ .
関連
-
[解決済み】Matlab: 黒を使わないグレースケールでのimagescの使用
-
[解決済み] Matlabで列ベクトルを反復処理する方法は?[重複].
-
[解決済み] エラー --> 整数には同じクラスの整数か、スカラー倍数しか組み合わせることができません。
-
[解決済み] Matlabで描画しています。図形を保存するか、変数を保存するか?
-
[解決済み] MATLABで関数のパラメータにデフォルト値を設定するにはどうすればよいですか?
-
[解決済み] matlab のプロットベクトルは同じ長さでなければなりません。
-
[解決済み] Matlabで'symfun'によって記号関数の微分を実装するには?
-
[解決済み] double 型の入力引数に対して未定義の関数 'symsum' が存在する。
-
[解決済み] JavaScriptでNULL、未定義、空白の変数をチェックする標準的な関数はありますか?
-
[解決済み] JavaScriptのNullとundefinedのチェックと==と===の違いについて
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] double 型の入力引数に対して未定義の関数 'int' が存在する [重複] 。
-
[解決済み] Matlabで矢印を描くには?
-
[解決済み] セルコンテンツから非セル配列オブジェクトへの代入
-
[解決済み] 部分ピボットによるガウス消去の実装【終了しました
-
[解決済み] Matlabで描画しています。図形を保存するか、変数を保存するか?
-
[解決済み] MATLABで分数を10進数に変換する【重複】。
-
[解決済み] MATLABで音を止めるには?
-
[解決済み] Matlabで'symfun'によって記号関数の微分を実装するには?
-
[解決済み] 入力引数が多すぎる Matlab ode45
-
[解決済み] MATLABのパスに影をつける」とはどういう意味ですか?ファイル内で行うにはどうしたらいいですか?