なぜ「関数または変数 'xxxx' が未定義です/認識さ​れません」のエラーが​発生するのですか?

1.345 views (last 30 days)
MathWorks Support Team
MathWorks Support Team on 14 Dec 2016
以下のようなエラーメッセージが発生した場合、どのように回避すればいいか、教えてください。
関数または変数 'xxxx(関数名)' が未定義です。
関数または変数 'xxxx(関数名)' が認識されません。 
未定義の関数、またはメソッド 'xxxx(関数名)' (タイプ 'yyyy(クラス名)' の入力引数)。

Accepted Answer

MathWorks Support Team
MathWorks Support Team on 28 Jan 2023
Edited: MathWorks Support Team on 28 Jan 2023
上記のエラーが発生しているとき、MATLABでは、指定された文字列を MATLABパス上の関数の名前または変数名として認識していません。
"未定義の関数または変数"のメッセージは、以下の理由で発生している可能性があります。
1) このコードの行が実行される前に定義されていない変数を使用しようとしている
x=1:10;
t=x.^2;
plot(x,y) 関数または変数 'y' が認識されません
% 考えられる修正案:
% 3行目を"plot(x,t)"に変更する
% または、2行目を "t=x.^2;" から "y=x.^2;" に変更する
2) 関数名や変数名を入力する際の誤字
なお、近年のリリースでは、これらのタイプミスを "もしかして(Did you mean)"の候補を提示して解決しようとします。
例:
>> foo = 42;
>> fo0
関数または変数 'fo0' が認識されません。
もしかして:
>> foo
3) 関数名や変数名の大文字・小文字を間違えている
近年のリリースでは、上記2 と同様にこれらのタイプミスを "もしかして(Did you mean)"の候補を提示して解決しようとします。
4) ディレクトリを変更したことで、使用した関数がMATLABのパスから外れている
5) ライセンスを取得していない、またはインストールされていないツールボックスの関数を使用している
なお、近年のリリースでは、"関数または変数が未定義"のエラーではなく、MATLAB はその関数を使用するライセンスを持っていないか、適切なツールボックスがインストールされていないことを知らせます。
例:
>> simulink
'simulink' には Simulink が必要です。
6) インストールされていないサードパーティ製 Toolbox に含まれる関数を使用している
7) 今使用している MATLAB のバージョンにはまだ含まれていない関数を使用している
8) 今使用している MATLAB のバージョンから削除された関数を使用している
近年のリリースの MATLAB では、これは "関数または変数が未定義" エラーではなく、MATLAB は新しい推奨される関数を知らせます。
9) スクリプトまたは関数に "clear all" または "clearvars" が含まれている
ワークスペースから削除された変数を使用しようとしている可能性があります。
10) 最初の入力としてオブジェクトなしにオブジェクトのメソッドを呼び出している
11) 使用中のプラットフォームとは異なるプラットフォームでコンパイルされた MEX 関数を使用している
回避方法:
(1) 未定義の関数または変数が表示されていること(パスまたは現在のワークスペースにあること)、この行のコードが実行される前に定義されていることを確認します。
次に、変数や関数が確実に存在する場合、関数名や変数名の大文字と小文字を確認します。
未定義の識別子が関数である場合、'which' 関数を使用すると、エラーが発生した関数から見えるかどうかを確認することができます。
which 関数名(もしくは変数名) -all
(2) MATLAB デスクトップから起動したヘルプドキュメント(>> doc) を使用して、使用しようとしている関数がその MATLAB バージョンで使用できることを確認します。ドキュメンテーションで見つからない場合、その関数は MATLAB の新しいリリースで追加されたか、MathWorks ではないサードパーティ製 Toolbox の一部である可能性があります。
特に、上記 5) の場合に、該当の Toolbox がインストール環境に含まれるか確認するには、license 関数を使用します。
例えば Simulink について調べる場合には、"license" 関数を使用します。
>> license('checkout','simulink')
出力として、'ans = 1'を返す場合は、該当製品のライセンスが有効です。
失敗した場合は、ライセンスが既にチェックアウトされているか、ライセンスが期限切れになっている、またはライセンスが無効であることを示します。
(3) 上記 (2) でドキュメンテーション上に関数も見つかり、ライセンスも所有している場合、MATLABの検索パスに問題がある可能性があります。その場合は、以下のMATLABコマンドを実行し、MATLABを再起動します。
restoredefaultpath % 検索パスの初期化
rehash toolboxcache % キャッシュのクリアとアップデート
savepath % 検索パスの上書き保存
関連情報:

More Answers (0)

Tags

No tags entered yet.

Products

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!