エラーの解決: 未定義の関数または変数
問題
MATLAB® で関数または変数を操作中に、次のようなエラー メッセージや同様のエラー メッセージが表示されることがあります。
関数または変数 'x' が未定義です。
これらのエラーは、通常、MATLAB が特定の変数または MATLAB プログラム ファイルを現在のディレクトリまたは検索パス上で見つけられないことを示しています。
考えられる解決策
関数名または変数名のスペルを確認
よくある原因の 1 つに、関数名または変数名のスペルミスがあります。特に、長い名前や紛らわしい文字 (英字 l
と数字の 1 など) を含む名前では、間違いが起こりやすくなり、見つけるのが困難になります。
多くの場合、MATLAB 関数名にスペルミスがあるときは、関数の候補名がコマンド ウィンドウに表示されます。たとえば、次のコマンドは、関数名に大文字を含んでいるので失敗します。
accumArray
Undefined function or variable 'accumArray'. Did you mean: >> accumarray
これが発生した場合、Enter キーを押して推奨されたコマンドを実行するか、または Esc キーを押してコマンドを解除します。
入力が関数構文に対応することを確認
通常、オブジェクト メソッドは関数構文 (たとえば、method(object,inputs)
) を使用して呼び出されます。あるいは、ドット表記 (たとえば、object.method(inputs)
) を使用して呼び出すこともできます。よくあるエラーの 1 つが、これらの構文を混在させることです。たとえば、関数構文を使用してメソッドを呼び出す場合がありますが、ドット表記構文に続いて入力を指定するために、入力としてのオブジェクトを抜かしてしまう場合があります (たとえば、method(inputs)
)。これを回避するため、オブジェクト メソッドを呼び出すときには、関数構文の最初の入力、またはドット表記の最初の識別子のいずれかを介して、必ずオブジェクトを最初に指定してください。
関数名とファイル名の一致を確認
関数を作成するときは、関数定義行の記述時に関数名を設定します。この名前は、必ず、保存先のファイル名に一致しなければなりません。たとえば、次のように、curveplot
という名前の関数を作成するとします。
function curveplot(xVal, yVal) - program code -
その場合は、その関数を含むファイルには curveplot.m
という名前を付けなければなりません。関数の pcode
ファイルを作成する場合は、そのファイルに curveplot.p
という名前を付けます。関数名とファイル名が競合する場合は、ファイル名が関数に指定された名前に優先します。この例では、関数 curveplot
を curveplotfunction.m
という名前のファイルに保存すると、この関数名による関数の呼び出しが失敗します。
curveplot 関数または変数 'curveplot' が未定義です。
この問題が発生したら、関数名かファイル名を変更して、同じになるようにしてください。
この関数を定義するファイルを見つけるには、次のように、MATLAB の [ファイルの検索] ユーティリティを使用します。
[ホーム] タブの [ファイル] セクションで、 [ファイルの検索] をクリックします。
[ファイル名検索] で、「
*.m
」と入力します。[次のテキストを含むファイルを検索] で、関数名を入力します。
[検索] ボタンをクリックします。
必要なツールボックスがインストールされ、バージョンが正しいことを確認
MATLAB またはツールボックスからの組み込み関数を使用できない場合は、その関数がインストールされていること、バージョンが正しいことを確認します。
どのツールボックスに必要な関数が含まれているかわからない場合は、https://www.mathworks.com/help
で関数のドキュメンテーションを検索してください。関数リファレンス ページの一番上にツールボックスの名前が表示されます。あるいは、関数が依存するツールボックスを特定する手順については、プログラムの依存関係の特定を参照してください。
関数の属するツールボックスがわかったら、関数 license
を使用して、MATLAB を実行しているシステムにどのツールボックスがインストールされているかを調べます。関数 license
では、現在インストールされている MathWorks® 製品すべてのリストが表示されます。license
で表示された出力内に必要なツールボックスが見つかった場合、そのツールボックスはインストール済みです。見つからない場合、そのツールボックスを使用するにはインストールしなければなりません。MathWorks 製品のインストールについては、ライセンス サーバーへのライセンス マネージャーのインストールを参照してください。
関数ツールボックスのアクセスに使用されるパスの確認
ヒント
カスタム ファイル パスがある場合、この手順によって削除されます。
MATLAB 検索パスは、ファイル システムにあるすべてのフォルダーのサブセットです。MATLAB では検索パスを使用して、MathWorks 製品で使用されるファイルを効率的に検出します。詳細については、MATLAB 検索パスとはを参照してください。
使用を試みている関数がツールボックスの一部である場合、ツールボックスが利用可能であることを ver
を使用して検証します。
MATLAB は、ツールボックスの情報をキャッシュ ファイルに保存するため、まず、このキャッシュを更新してから、パスをリセットしなければなりません。
[ホーム] タブの [環境] セクションで [基本設定] をクリックします。
[基本設定] ダイアログ ボックスが表示されます。
[MATLAB] 、 [一般] ページで、[ツールボックス パス キャッシュの更新] を選択します。
[ホーム] タブの [環境] セクションで、 [パスの設定] を選択します。
[パスの設定] ダイアログ ボックスが開きます。
[既定の設定] を選択します。
小さなダイアログ ボックスが開き、続行すると現在のパス設定が失われる、という警告のメッセージが表示されます。続行する場合は [はい] を選択します。
license
を実行して、ツールボックスがインストールされているかどうかを確認します。インストールされていない場合は、このツールボックスを再インストールして、この関数を使用してください。ツールボックスのインストールの詳細については、How do I install additional toolboxes into an existing installation of MATLAB を参照してください。
license
によってツールボックスが表示されたら、次のコマンドを実行して、関数を見つけることができるかどうかを調べます。
which -all <functionname>
は、関数の名前で置き換えます。MATLAB が関数ファイルを見つけると、そのファイルへのパスがユーザーに提示されます。関数 <functionname>
addpath
を使用して、そのファイルをパスに追加できます。関数ファイルが見つからない場合は、必要なツールボックスがインストールされていること、そのバージョンが正しいことを確認します。
ライセンスがアクティブであることを確認
MATLAB ツールボックスからの組み込み関数を使用できず、そのツールボックスがインストール済みであることを確認した場合は、そのツールボックスに対してアクティブなライセンスがあることを確認します。license
を使用して、現時点でアクティブなライセンスを表示します。ライセンスの管理についてさらなるサポートが必要な場合は、ライセンス管理を参照してください。