目錄
1 概述
2 問題所在
3 《葵花寶典》——解決政策
3.1 驗證函數或變量名稱的拼寫
3.2 編寫的檔案名需要和函數名一緻
3.3 驗證輸入是否符合函數文法
3.4 確定安裝了必要的工具箱并且版本正确
3.5 檔案路徑與系統目前路徑不比對
3.6 确認許可證有效
3.7 指令視窗中直接寫函數名
1 概述
Matlab中這個破問題困惑了很多初學者,當然也困惑了很多高手,高手,高高手。
2 問題所在
當在 MATLAB® 中使用函數或變量時,可能會遇到以下錯誤消息或類似的消息:
未定義函數或變量 'x'。比如我下面這個鬼東西:
這些錯誤通常訓示 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 查找檔案實用工具,如下所示:
- 在首頁頁籤上的檔案部分中,點選
- 查找檔案。
- 在查找具有以下名稱的檔案下,輸入
*.m
- 在查找包含以下文本的檔案下,輸入函數名稱。
- 點選查找按鈕
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 将工具箱資訊存儲在緩存檔案中,是以您需要先更新此緩存,然後再重置路徑。
運作
- 在首頁頁籤上的環境部分中,點選
預設。
此時将顯示“預設項”對話框。
- 在MATLAB > 正常頁上,選擇更新工具箱路徑緩存。
- 在首頁頁籤上的環境部分中,選擇
設定路徑。
此時将打開“設定路徑”對話框。
選擇預設。
此時将打開一個很小的對話框,警告您如果繼續,将會丢失目前路徑設定。如果您決定繼續,請選擇是。
ver
以檢視工具箱是否已安裝。如果未安裝,則您可能需要重新安裝此工具箱以使用該函數。有關安裝工具箱的詳細資訊,請參閱 How do I install additional toolboxes into an existing installation of MATLAB。
當
ver
顯示您的工具箱後,請運作以下指令以檢視能否找到相應函數:
which -all <functionname>
将
替換為函數的名稱。如果 MATLAB 找到您的函數檔案,它會向您顯示該檔案的路徑。您可以使用
<functionname>
函數将該檔案添加到路徑中。如果未找到,請確定安裝了必要的工具箱并且版本正确。
addpath
3.5 檔案路徑與系統目前路徑不比對
大家發現,檔案路徑是“C:\User\2079\encrypt.m”,而MATLAB系統路徑是“D:\ruanjian\Matlab \bin”,很顯然檔案路徑與系統目前路徑是不比對的。這時,我們将我們的M檔案(另存為)存儲到“D:\ruanjian\Matlab \bin”路徑下,這時我們驚奇地發現問題解決啦!
簡單來講,要想運作成功,前提是檔案路徑與系統目前路徑必須一緻。
3.6 确認許可證有效
如果您無法使用 MATLAB 工具箱中的内置函數,并且确認工具箱已安裝,請確定您擁有該工具箱的有效許可證。使用 license 可顯示目前有效許可證。有關管理許可證的其他支援,請參閱管理您的許可證。
3.7 指令視窗中直接寫函數名
這種情況除非已經在函數檔案中定義了函數名才會避免。否則沒有函數檔案直接寫這條指令語句肯定是不可行的。