web-dev-qa-db-ja.com

「タイプ「double」の入力引数の未定義関数「function_name」。」

さまざまな形やサイズで頻繁に表示される質問は次のとおりです。次のエラーメッセージが表示されるのはなぜですか。

「タイプ「double」の入力引数の未定義関数「function_name」。」

この投稿では、このエラーメッセージが発生する可能性のあるさまざまなシナリオすべてに対処し、解決方法を提案します。

18
Stewie Griffin

このエラーメッセージに出くわし、その意味がわからない場合。これで安心してください:私たちの90%が同じフレーズをグーグルで検索しています。

「タイプ 'double'の入力引数の未定義関数 'int'。」

エラーメッセージは一目瞭然ですが、それでも混乱を引き起こす可能性があります。 (ランダムに'int'を選択しましたが、'train', 'table', 'my_function'などでもかまいません)。

このエラーが発生する主なケースは2つあります。

  1. 存在しない関数を使用しようとしています(まだ)
  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

ただし、「未定義の関数 'x' ...」を取得しても、次のようになる場合があります。その場合、以下のポイント3を参照してください。

which x
x is a variable.

1。しかし、関数「int」は存在します! ここに記載 !?

はい、intは存在しますが、 Symbolic Toolbox がある場合のみです。ツールボックスは追加パッケージであり、別途購入する必要があります(非常に高価になる可能性もあります)ので、そのパッケージがない可能性があります。

「未定義の関数」エラーが表示されるが、ドキュメントで関数が見つかった場合は、左側のメニューを見るか、単にアドレスを確認してください。標準の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
                   ^^^^ 

解決策:使用していないツールボックスの一部ではない別の関数を見つけます。スキルのあるGoogle社員なら、探しているものを見つけることができます。見つからない場合は、助けを求めてください。試したことを説明し、努力したことを示します。

2。しかし、関数は ここに記載されています であり、コアMatlabの一部です!?

関数は標準のMatlabインストールの一部であり、十分に文書化されていますが、このエラーが表示される場合があります。このエラーの最も可能性の高い原因は、Matlabの古いバージョンを使用していることです。ドキュメントを確認すると、ページの下部に次が表示されます。

R2013bで導入

したがって、R2012bを使用している場合、たとえばtableは使用できません。

解決策:Matlabのバージョンで関数が定義されているかどうかを確認します。まだ実装されていない場合は、Matlabを更新するか、別の方法を見つける必要があります。 tableの代わりに、たとえばセルまたは構造体を使用できます。

3。しかし、変数「my_variable」は存在します!上記の行で作成しました!

いいえ、あなたはしませんでした。変数myvariablemy_Variablemy_Variable、または上記の行で類似したものを作成した可能性があります。また、作成したのに、誤って cleared にした可能性もあります。

解決策:コードを確認します。タイプミス、誤って変数をクリアした場所などを探してください。変数をマークすると、Matlabエディター内で下に次の行が表示されます。 。また、使用されていない変数の下にオレンジ色の線が表示されます。

4。しかし、which yと入力すると、「yは変数です」と表示されます。

「Undefined function 'y'で上記のエラーが発生したが、whichyが存在することを示している場合、エラーメッセージにはさらにいくつかの行が含まれています。

my_function(x)
Undefined function or variable 'y'.
Error in my_function (line 2)
t = x*y; 

>> which y
y is a variable.

これは、 Matlab Workspaceyという変数があることを示しています( this link も確認してください)。

問題は、関数がこのワークスペースにアクセスできないことです。

関数はベースワークスペースを使用しません。すべての関数には、独自の関数ワークスペースがあります。

関数で変数を表示して使用する場合は、 argument として渡す必要があります。これにより、変数はその関数のローカルワークスペースの一部になります。同様に、関数内で作成された変数に関数の外部からアクセスできるようにするには、関数からの出力として変数を使用する必要があります。

Solution:使用する関数への入力引数として使用する変数を渡します。関数内の名前が内部的に一貫していることを確認してください。つまり関数全体で同じ名前を持つ必要があります。関数の外部と内部で変数名の間には関係がないことに注意してください。

5。しかし、変数を関数への入力として渡しますが、それでも同じエラーメッセージが表示されます!?

はい、おそらく変数を入力として使用します。ただし、変数名は異なる関数で必ずしも同じではありません(ほとんどの場合同じではありません)。

次の機能があるとします。

function output = my_function(x)  
output = 2*y;
end

入力変数としてyを使用し、関数内でyを使用している場合でも、以下のコードのようにワークスペースから呼び出すと、上記と同じエラーが発生します。

y = 3;
res = my_function(y)

これは、関数my_function内で、関数の外部で呼び出されたものに関係なく、入力として使用する変数がxと呼ばれるためです。

Solution:関数ヘッダーの入力変数名を変更するか、関数全体で変数の名前を変更します。

6。しかし、私はxをグローバル変数として作成しました!?

まず、グローバル変数を使用しないことをお勧めします!変数を引数として渡すほうがずっと良いです。

Matlabワークスペースで変数を global として宣言するだけでは不十分です。使用するすべての関数で宣言する必要があります。したがって、グローバル変数xがある場合は、すべての関数でglobal xを実行する必要があります。

解決策:コードを書き換え、グローバル変数を使用する代わりに変数を引数として渡します。これがオプションでない場合は、使用しているすべての関数にglobal xを追加してください。


この回答に加えて、公式の Matlab FAQ を参照できます。

28
Stewie Griffin

私も得た

タイプ「double」の入力引数の未定義関数「...」。

エラーが発生し、上記の推奨事項を試しましたが、問題を解決できませんでした。次に、現在の作業ディレクトリに特殊文字(*)があることに気づいたので、ディレクトリの名前を変更したときの問題を解決しました。

最後に、cd引数を使用して、変更操作後に現在のディレクトリを変更することを忘れないでください。

1
Can Ayhan

問題を見る別の方法:

入力引数は、関数の説明で読み取れるような順序でなければなりません。

0
user50374