天天看點

未定義的函數或變量【一文講透】(Matlab)

未定義的函數或變量【一文講透】(Matlab)

目錄

​​1 概述​​

​​2 問題所在​​

​​3 《葵花寶典》——解決政策​​

​​3.1 驗證函數或變量名稱的拼寫​​

​​3.2 編寫的檔案名需要和函數名一緻​​

​​  3.3 驗證輸入是否符合函數文法​​

​​3.4 確定安裝了必要的工具箱并且版本正确​​

​​3.5 檔案路徑與系統目前路徑不比對 ​​

​​3.6 确認許可證有效​​

​​3.7 指令視窗中直接寫函數名​​

1 概述

Matlab中這個破問題困惑了很多初學者,當然也困惑了很多高手,高手,高高手。

未定義的函數或變量【一文講透】(Matlab)

2 問題所在

當在 MATLAB® 中使用函數或變量時,可能會遇到以下錯誤消息或類似的消息:

未定義函數或變量 'x'。比如我下面這個鬼東西:

未定義的函數或變量【一文講透】(Matlab)

這些錯誤通常訓示 MATLAB 在目前目錄或搜尋路徑中找不到特定的變量或 MATLAB 程式檔案。

下面我們來一起解決這個問題,看看你的屬于哪個問題。

3 《葵花寶典》——解決政策

3.1 驗證函數或變量名稱的拼寫

最常見的原因之一是函數或變量名稱拼寫錯誤。尤其對于較長的名稱或包含相似字元(例如,字母 ​

​l​

​ 和數字 1)的名稱,很容易出錯而不易察覺。

通常,如果您拼錯 MATLAB 函數的名稱,指令行視窗中将顯示一個建議的函數名稱。例如,由于以下指令在函數名稱中包含大寫字母,是以該指令将會失敗。

accumArray      
Undefined function or variable 'accumArray'.
 
Did you mean:
>> accumarray      
此時,按 Enter 執行建議的指令,或按 Esc 取消該指令。

3.2 編寫的檔案名需要和函數名一緻

即如果編寫的函數為:

function [rt,f,g] = twodsin(A,u0, ve,M,N)      

那麼檔案名就需要設定為twodsin.m

錯誤的命名方法:

未定義的函數或變量【一文講透】(Matlab)

修改之後:

未定義的函數或變量【一文講透】(Matlab)

如果您遇到此問題,請更改函數名稱或檔案名,使它們保持相同。

要找到定義此函數的檔案,請使用 MATLAB 查找檔案實用工具,如下所示:

  1. 在首頁頁籤上的檔案部分中,點選 
  2. 未定義的函數或變量【一文講透】(Matlab)
  3. 查找檔案。
  4. 在查找具有以下名稱的檔案下,輸入 ​

    ​*.m​

  5. 在查找包含以下文本的檔案下,輸入函數名稱。
  6. 點選查找按鈕
未定義的函數或變量【一文講透】(Matlab)

  3.3 驗證輸入是否符合函數文法

通常使用函數文法調用對象方法:例如 ​

​method(object,inputs)​

​​。也可以使用圓點表示法來調用它們:例如 ​

​object.method(inputs)​

​​。一個常見的錯誤是混合使用這些文法。例如,您可能使用函數文法調用該方法,但卻提供後跟圓點表示法文法的輸入且未指定對象作為輸入:例如 ​

​method(inputs)​

​。為了避免這種情況,在調用對象方法時,請確定首先指定對象,或者通過函數文法的第一個輸入,或者通過圓點表示法的第一個辨別符。

3.4 確定安裝了必要的工具箱并且版本正确

如果您無法使用 MATLAB 或其工具箱中的内置函數,請確定安裝了該函數且版本正确。

如果您不知道哪個工具箱包含所需的函數,請在 ​

​https://www.mathworks.com/help​

​​ 中搜尋函數文檔。工具箱名稱顯示在函數參考頁的頂部。或者,如需識别函數所依賴的工具箱的步驟,請參閱​​确定程式依賴項​​。

當您知道函數所屬的工具箱後,請使用 ​​ver​​​ 函數檢視在運作 MATLAB 的系統上安裝了哪些工具箱。​

​ver​

​​ 函數會顯示目前已安裝的所有 MathWorks® 産品的清單。如果您可以在 ​

​ver​

​ 顯示的輸出中找到所需的工具箱,則表明該工具箱已安裝。如果找不到,您需要安裝它才能使用。如果找不到,您需要安裝它才能使用。有關安裝 MathWorks 産品的幫助,請參閱。

MATLAB 搜尋路徑是檔案系統中所有檔案夾的子集。MATLAB 使用搜尋路徑來高效地定位用于 MathWorks 産品的檔案。有關詳細資訊,請參閱​​什麼是 MATLAB 搜尋路徑?​​。

如果您嘗試使用的函數是工具箱的一部分,則使用 ​

​ver​

​ 驗證該工具箱是否可用。

由于 MATLAB 将工具箱資訊存儲在緩存檔案中,是以您需要先更新此緩存,然後再重置路徑。

  1. 在首頁頁籤上的環境部分中,點選 
  2. 未定義的函數或變量【一文講透】(Matlab)
  3. 預設。

    此時将顯示“預設項”對話框。

  4. 在MATLAB > 正常頁上,選擇更新工具箱路徑緩存。
  5. 在首頁頁籤上的環境部分中,選擇 
  6. 未定義的函數或變量【一文講透】(Matlab)
  7. 設定路徑。

    此時将打開“設定路徑”對話框。

  8. 選擇預設。

    此時将打開一個很小的對話框,警告您如果繼續,将會丢失目前路徑設定。如果您決定繼續,請選擇是。

運作 ​

​ver​

​​ 以檢視工具箱是否已安裝。如果未安裝,則您可能需要重新安裝此工具箱以使用該函數。有關安裝工具箱的詳細資訊,請參閱 ​​How do I install additional toolboxes into an existing installation of MATLAB​​。

當 ​

​ver​

​ 顯示您的工具箱後,請運作以下指令以檢視能否找到相應函數:

which -all <functionname>

将 ​

​<functionname>​

​​ 替換為函數的名稱。如果 MATLAB 找到您的函數檔案,它會向您顯示該檔案的路徑。您可以使用 ​

​addpath​

​ 函數将該檔案添加到路徑中。如果未找到,請確定安裝了必要的工具箱并且版本正确。

3.5 檔案路徑與系統目前路徑不比對 

未定義的函數或變量【一文講透】(Matlab)

大家發現,檔案路徑是“C:\User\2079\encrypt.m”,而MATLAB系統路徑是“D:\ruanjian\Matlab \bin”,很顯然檔案路徑與系統目前路徑是不比對的。這時,我們将我們的M檔案(另存為)存儲到“D:\ruanjian\Matlab \bin”路徑下,這時我們驚奇地發現問題解決啦!

簡單來講,要想運作成功,前提是檔案路徑與系統目前路徑必須一緻。

3.6 确認許可證有效

如果您無法使用 MATLAB 工具箱中的内置函數,并且确認工具箱已安裝,請確定您擁有該工具箱的有效許可證。使用 ​​license​​​ 可顯示目前有效許可證。有關管理許可證的其他支援,請參閱​​管理您的許可證​​。

3.7 指令視窗中直接寫函數名

這種情況除非已經在函數檔案中定義了函數名才會避免。否則沒有函數檔案直接寫這條指令語句肯定是不可行的。

未定義的函數或變量【一文講透】(Matlab)

繼續閱讀