メインコンテンツ

エラーの解決: 関数または変数が認識されません

問題

次の頻繁に表示されるエラー メッセージは、MATLAB® が特定のプログラム ファイルまたは変数を見つけることができないことを示しています。

関数または変数 'x' が認識されません。

このエラーの発生原因となる状況は多数あります。このトピックでは、一般的なシナリオを識別して対処する方法について説明します。

考えられる解決策

タイプミスの検出

よくある原因の 1 つに、関数名または変数名のスペルミスがあります。特に、長い名前や紛らわしい文字 (英字 l と数字の 1 など) を含む名前では、間違いが起こりやすくなり、見つけるのが困難になります。

多くの場合、名前にスペルミスがあるときは、名前の候補がコマンド ウィンドウに表示されます。たとえば、次のコマンドは、関数名に大文字を含んでいるので失敗します。

accumArray(1,10)
Unrecognized function or variable 'accumArray'.
 
Did you mean:
>> accumarray(1,10)

Enter キーを押して推奨されたコマンドを実行するか、または Esc キーを押してコマンドを解除します。

ワークスペース内の変数の確認

使用する変数が現在のワークスペースで使用可能かどうかを確認するには、whos コマンドを使用します。

変数がリストされていない場合は、次の原因が考えられます。

  • 変数を作成するコードが現在のセッションでまだ実行されていないか、clear または clearvars コマンドの呼び出しによって変数が削除された。以前に変数を作成した場合、そのコードはコマンド履歴で使用できることが多く、コマンド ラインから上矢印キーを使用してアクセスできます。

  • スクリプト ファイルを編集している場合、コードで変数に値を代入する前にその変数を使用しようとしている可能性がある。エディターでファイルを表示するときに、変数名をクリックして、変数へのすべての参照を検出し、演算の順序を確認できます。

    In a script file, the myvar variable name is highlighted throughout the code. Indicators on the right side of the Editor show where the name occurs. Pointing to an indicator shows the corresponding line number.

変数がワークスペース内にあり、エラーをスローする関数を作成している場合は、変数を入力引数として関数に渡していることを確認してください。関数はベース ワークスペースを使用しないため、変数は関数ワークスペースに明示的に渡す必要があります。たとえば、次の関数は、変数 c がベース ワークスペースに存在していてもその変数を検出できません。

function y = myfunction(x)
 y = x + c;
end

この問題を修正するには、関数定義行に c を追加します。

function y = myfunction(x,c)
 y = x + c;
end

次に、関数呼び出しに変数を含めます。

Y = myfunction(X,c);

ワークスペースの詳細については、ベース ワークスペースと関数ワークスペースを参照してください。

関数が使用可能かどうかの確認

認識されない項目が関数であり、その関数についてよく知らない場合は、インストールされているソフトウェアにその関数が含まれているかどうかを確認してください。

まず、関数の最新の MathWorks ドキュメンテーションを検索します。その関数に関するドキュメンテーションがない場合は、MathWorks® File Exchange などの他のリソースを調べて、その関数が含まれているソフトウェアを見つけてください。

MathWorks ドキュメンテーションで関数が見つかった場合、次のようにします。

  1. ドキュメンテーションのコード例を実行して、関数が使用可能かどうかを確認します。コードで Unrecognized function エラーが生成されない場合は、関数入力の確認に進んで問題の診断を続行します。

  2. その関数がソフトウェアのバージョンよりも新しいかどうかを確認します。関数が導入された時期を特定するには、その関数のリファレンス ページのバージョン履歴セクションを参照してください。

    Version History sections appear before See Also sections and include text in the form of "Introduced in" with the release number.

    MATLAB のバージョンを確認するには、version コマンドを使用します。リリースはかっこ内です。

    version
    ans =
    
        '24.1.0.2661297 (R2024a) Update 5'
    
  3. 必要な製品がインストールされているかどうかを確認します。必要な製品は、ドキュメンテーション ページの左側のペインにあります。

    Sample doc page with the product name "Text Analytics Toolbox" in the left pane

    その製品がインストールされているかどうかを確認するには、ver コマンドを使用します。

    ver
    .
    .
    .
    MATLAB                                          Version 24.1        (R2024a)
    Deep Learning Toolbox                           Version 24.1        (R2024a)
    Statistics and Machine Learning Toolbox         Version 24.1        (R2024a)
    Text Analytics Toolbox                          Version 24.1        (R2024a)
    

    製品がリストされていない場合は、インストールされていない可能性があります。製品のインストールについては、アドオンの取得と管理を参照してください。

  4. 製品をインストールしたが、ver で再生成されたリストに表示されていない場合は、ツールボックスのキャッシュを更新します。[ホーム] タブの [環境] セクションで [設定] をクリックします。[MATLAB][一般] を選択し、[ツールボックス パス キャッシュの更新] をクリックします。

  5. それでも製品が ver のリストに表示されない場合は、そのツールボックスのアクティブなライセンスを所有していることを確認してください。license コマンドを使用して現在アクティブなライセンスを表示し、ライセンス センターにアクセスして関連製品を表示します。ライセンスの管理の詳細については、ライセンス管理を参照してください。

関数入力の確認

入力が関数で認識できない形式である場合、既存の変数を指定して使用可能な関数を呼び出しても失敗する可能性があります。予期される構文と入力引数について、関数のドキュメンテーションを参照してください。doc コマンドを使用して関数のドキュメンテーションに直接アクセスできます。

doc functionName

特定するのが難しいことがある一般的な問題が 2 つあります。予期されないインデックス式の使用とオブジェクト入力の省略です。

予期されないインデックス.  入力引数の位置にコロンを入力すると、MATLAB はコードを関数呼び出しではなくインデックス式として解釈します。たとえば、isnumeric 関数は単一の入力配列 isnumeric(A) を受け入れます。多くの場合、isnumeric は複数の引数がある場合にそのことを検出できます。

isnumeric(A,B)
Error using isnumeric
Too many input arguments.

ただし、引数の代わりにコロンを使用すると、MATLAB は isnumeric を関数ではなく未定義の変数として解釈します。

isnumeric(A,:)
Unrecognized function or variable 'isnumeric'.

オブジェクト入力の省略.  オブジェクト メソッドは通常、method(object,inputs) という形式の関数構文を使用して記述されます。object.method(inputs) という形式のメソッドのドット表記を使用することに慣れている場合は、関数形式を使用するときに、最初の入力として必ずオブジェクトを含めるようにしてください。

関数の使用可能化

コマンド ラインまたは別のファイルから呼び出す関数を作成する場合は、次のようにします。

  • 関数と同じ名前のファイルに関数を保存します。関数名とファイル名が異なる場合は、ファイル名によって関数名がオーバーライドされます。

    たとえば、curveplot という名前の関数は、拡張子が .m または .mlxcurveplot という名前のファイルに保存してください。関数 curveplotcurveplotfunction.m という名前のファイル内にある場合、curveplot の呼び出しは失敗します。

  • 関数がファイル内で定義されている最初または唯一の関数であること、およびファイルに関数定義以外のコードが含まれていないことを確認します。関数がこれらの条件を満たさない場合、その関数は "ローカル関数" であり、そのファイルの外部から呼び出すことはできません。詳細については、ローカル関数を参照してください。

関数の作成の詳細については、関数のファイルでの作成を参照してください。