(translator=pacific, ChineseSource=pacific-20020530-8\function.html, EnglishSource=c:\matlabr12\help\techdoc\ref\function.html)
MATLAB Function Reference    
function

把 M檔案函式化(Function M-files)

Description

我們可以利用既有的函式再定義新的MATLAB函式。而這種利用已有的函式和指令去產生、並以文字方式表示的函數叫做M檔案。

M檔案可以是副本(scripts) 或函式 (functions)。副本(scripts)是包含一段MATLAB敘述的檔案。而函式使用到本身的區域變數和輸入引數。

 M檔案的名稱以英文字母開頭,並包含延伸檔名 .m。M檔案的檔名(不包括延伸檔名)是當你想使用這個副本(scripts)或函式時,MATLAB所要尋找的對象。

M檔案的第一行有特定的語法。第一行中所指定的函式名稱一定要和檔案名稱一樣(不包含延伸檔名)。下例中為一檔名為 stat.m 的內容

定義一個新函式 stat,拿來計算向量的平均值和標準差。而在函式中所用到的變數全是區域變數。

子函式( subfunction),為在函式或子函式之後,再利用 function這個關鍵字來定義一個新的函式,而這個函式只能在同一個檔案中的其他函式中所看見(visible)。下例中 avg 是在 stat.m檔案中的子函式:

我們無法從定義這個子函式的檔案以外看到(visible)它。函式通常到結尾時才會回傳,而可使用 return 指令來強迫其提早回傳。

當MATLAB不能用函式名稱來認出這個函式時,會自動去磁碟中尋找同名的檔案。若在磁碟中找到,會將之編譯(compile)並放入記憶體中,以方便接下來使用。一般來說,若你在MATLAB中輸入指令,直譯器(interpreter)會做下列事項:

  1. 檢查輸入名稱是否為變數。
  2. 檢查輸入名稱是否為未超載的內部函式( an internal function  that was not overloaded.)(eig, sin)
  3. 檢查輸入名稱是否為區域函式(local function) (不太懂-->local in sense of multifunction file).
  4. 檢查輸入名稱是否放在私用目錄(private directory)中
  5. 找出所有可能會用到的函式的目錄和路徑。而順序不是很重要。( Order is of no importance.)

在執行時:

  1. 檢查輸入名稱是否被某些函式包住(Checks to see if the name is wired to a specific function) (上列第2, 3, 4項 )
  2. 使用優先權規則(precedence rules)來來決定會呼叫上列第5點的哪個實例 (to determine which instance from 5 above to call)(我們可能預設為MATLAB內部函式)。建構式比其他函式優先呼叫。

當你從命令列(command line)或M檔案中呼叫M檔案所定義的函式時,MATLAB會解析此函式並存入記憶體中。而解析過的檔案直到使用清除指令或下quit 指令關閉MATLAB時才會清除掉。 而 pcode 指令會進行解析的動作並轉成P檔案存入磁碟中,以便將將來載入。

See Also

nargin, nargout, pcode, varargin, varargout, what


 func2str function_handle (@)