1. m文件與m函數的區別
所謂 MATLAB 程序,大致分為兩類:
M 腳本文件 (M-Script) 和 M 函數 (M-function), 它們均是普通的 ASCII 碼構成的文件。
M 腳本文件中包含一族由 MATLAB 語言所支持的語句,它類似於 DOS 下的批處理文件,它的執行方式很簡單,用戶只需在 MATLAB 的提示符 >> 下鍵入該 M 文件的文件名,這樣 MATLAB 就會自動執行該 M 文件中的各條語句,並將結果直接返回到 MATLAB 的工作空間。
M 函數格式是 MATLAB 程序設計的主流,一般情況下, 不建議您使用 M 腳本文件格式編程。
MATLAB 的 M 函數是由 function 語句引導的,其基本格式如下:
function [返回變量列表] = 函數名 (輸入變量列表) 注釋說明語句段, 由 % 引導 輸入、返回變量格式的檢測 函數體語句
2.輸入變量和返回變量的個數
這里輸入和返回變量的實際個數分別由 nargin 和 nargout 兩個 MATLAB 保留變量來給出,只要進入該函數,MATLAB 就將自動生成這兩個變量,不論您是否直接使用這兩個變量。
返回變量如果多於 1 個,則應該用方括號將它們括起來,否則可以省去方括號。輸入變量和返回變量之間用逗號來分割。
3.注釋語句的使用
注釋語句段的每行語句都應該由百分號 % 引導,百分號后面的內容不執行,只起注釋作用。用戶采用 help 命令則可以顯示出來注釋語句段的內容。此外,正規的變量個數檢測也是必要的。如果輸入或返回變量格式不正確,則應該給出相應的提示。我們將通過下面的例子來演示函數編程的格式與方法。
假設我們想生成一個 nxm 階的 Hilbert 矩陣, 它的第 i 行第 j 列的元素值為 1/(i+j-1)。我們想在編寫的函數中實現下面幾點: 如果只給出一個輸入參數,則會自動生成一個方陣,即令 m=n 在函數中給出合適的幫助信息,包括基本功能、調用方式和參數說明 檢測輸入和返回變量的個數,如果有錯誤則給出錯誤信息
如果調用時不要求返回變量,則將顯示結果矩陣。其實在編寫程序時養成一個好的習慣,無論對程序設計者還是對程序的維護者、使用者都是大有裨益的。
4. 示例程序
采用 MATLAB 函數編寫格式和上述要求,我們可以編寫出一個函數
function A=myhilb(n, m) %MYHILB a demonstrative M-function. % A=MYHILB(N, M) generates an N by M Hilbert matrix A. % A=MYHILB(N) generates an N by N square Hilbert matrix. % MYHILB(N,M) displays ONLY the Hilbert matrix, but do not return any % matrix back to the calling function. % %See also: HILB. % Designed by Professor Dingyu XUE, Northeastern University, PRC % 5 April, 1995, Last modified by DYX at 21 March, 2000 if nargout>1, error('Too many output arguments.'); end if nargin==1, m=n; elseif nargin==0 | nargin>2 error('Wrong number of iutput arguments.'); end A1=zeros(n,m); for i=1: n for j=1:m A1(i,j)=1/(i+j-1); end, end if nargout==1, A=A1; elseif nargout==0, disp(A1); end
這樣規范編寫的函數用 help 命令可以顯示出其幫助信息:
>> help myhilb MYHILB a demonstrative M-function. A=MYHILB(N, M) generates an N by M Hilbert matrix A. A=MYHILB(N) generates an N by N square Hilbert matrix. MYHILB(N,M) displays ONLY the Hilbert matrix, but do not return any matrix back to the calling function. See also: HILB.
有了函數之后,可以采用下面的各種方法來調用它,並產生出所需的結果。
>> A=myhilb(3,4) A = 1.0000 0.5000 0.3333 0.2500 0.5000 0.3333 0.2500 0.2000 0.3333 0.2500 0.2000 0.1667 >> A=myhilb(4) A = 1.0000 0.5000 0.3333 0.2500 0.5000 0.3333 0.2500 0.2000 0.3333 0.2500 0.2000 0.1667 0.2500 0.2000 0.1667 0.1429 >> myhilb(4) 1.0000 0.5000 0.3333 0.2500 0.5000 0.3333 0.2500 0.2000 0.3333 0.2500 0.2000 0.1667 0.2500 0.2000 0.1667 0.1429
5.MATLAB 工具箱編寫技巧
放入一個目錄中的為某種目的專門編寫的一組 MATLAB 函數就可以組成一個工具箱。 從某種意義上說,任何一個 MATLAB 語言的使用者都可以是工具箱的作者。在一個工具箱中,應該有一個名為 Contents.m 的文件,用來描述工具箱中所有 MATLAB 函數的名稱和意義。
在該文件中第 1 行應該給出該工具箱的名稱,在第2行中給出該工具箱的版本與修改時間等信息。 然后分類地給出該工具箱中各類函數的最基本功能。 注意,本文件中所有的語句都應該是注釋語句,由百分號 % 引導,空行也應該由 % 引導。
6.檢查matlab語法錯誤
另外,因為 MATLAB是一種解釋性語言,所以即使在某個或某些函數中存在語法錯誤,但如果沒執行到該語句時可能就不會發現該錯誤,這在一個成功的程序設計中是不能容許的。要查出某目錄中所有的M函數語法錯誤,首先應該用 cd 命令 進入該目錄,然后運行 pcode * 命令進行偽代碼轉換。因為該命令會將 MATLAB 函數轉換成偽代碼,而在轉換過程中該程序將自動翻譯每一條語句,所以一旦發現有語法錯誤,將會停止翻譯,給出錯誤信息。改正了該語法錯誤后,再重新執行 pcode 命令,直到沒有錯誤為止。至少這樣會保證目錄下所有的程序不含有語法錯誤。
