在 M-file 裡面,如果有 function 這個保留字, 它就定義了一個函式,而不是腳本。
凡是使用者自己寫的函式,都叫做使用者自訂函式 (user-defined function)。 寫好了之後,要將那 M-file 存放在目前工作的檔案夾, 或者是搜尋路徑上指定的檔案夾之一,才能使用。 詳情請參考前一節的說明。
我們回顧 [while 迴圈] 那一節寫的腳本程式:
將它改寫成函式,然後藉它來說明關於函式的基本概念。x = 3; n=0; while (x>1) & (n<1000) n = n+1; if (rem(x,2)) x = 3*x+1 else x = x/2 end pause(1); end
如果用 M-file 來儲存函式,最好將 M-file 和函式取同樣的名字, 這樣將來比較容易管理。例如現在我想要寫一個函式 collatz(), 讓它取得一個正整數 x 當作 x0, 做 Collatz 數列 xn,然後輸出使得 xn=1 的最小 n。 那麼我用以下語句「宣告」函式:
function n = collatz(x)首先,function 是個保留字,表示要宣告函式了。 而 collatz 是這個函式的名字,括號裡的 x 是輸入參數名, 等號左邊的 n 是輸出參數名,學名是「返回變數」(return variable), 簡單地說就是這個函式的「答案」。
輸入參數是從呼叫者 (caller) 那裡傳過來的,通常呼叫者就是 Matlab 的操作介面。 呼叫者傳來一個數,譬如在 Matlab 操作介面下指令 (左邊紅色符號只是代表 Matlab 操作介面的提示號)
>> collatz(3)則 Matlab 操作介面呼叫了 collatz() 函式,而把 3 傳了過去。 collatz() 獲得 3 之後,就相當於做了
x = 3;這個指派動作。
因為 x 變數的指派動作已經由呼叫者決定,而被 Matlab 暗中完成了, 所以函式的程式中就不必再寫。因此,整個函式的原始碼就是
將函式與腳本比較,發現function n = collatz(x) n=0; while (x>1) & (n<1000) n = n+1; if (rem(x,2)) x = 3*x+1; else x = x/2; end end
將上述函式儲存在 collatz.m 檔案內, 而將檔案放在目前工作的檔案夾內,Matlab 就可以「看」到它,試試看
>> which collatz應該會看到 collatz.m 的全名。然後試試看執行
>> collatz(3)會得到答案 7。這是因為
x0=3, x1=10, x2=5, x3=16, x4=8, x5=4, x6=2, x7=1
習題