當我們在 Matlab 的環境內下指令,每輸入一句指令,按了 Enter 之後 Matlab 就開始執行; 我們要等待它執行結束之後才能輸入下一個指令,然後按 Enter 叫它執行。 這種一個指令、一個動作的操作模式稱為 互動模式 (interactive mode)。 我們也可以將一批想要 Matlab 執行的指令, 寫在 M 檔案內,讓 Matlab 讀取之後就一行緊接著一行的執行。 這種預先設定步驟、叫它照著做的操作模式稱為 批次模式 (batch mode)。 在批次模式中,M 檔案就好像一齣戲的腳本 (script), 而 Matlab 就騎驢看著腳本一句句跟著唱。 所以我們稱這種程式為腳本或腳本程式。
腳本程式必須是個 M 檔案,也就是副檔名為 m 的檔案。 M 檔案裡面寫的是 Matlab 的指令,所以是純文字檔,可以用任何編輯器處理。 只要將一個 M 檔案放在工作區內,或是放在搜尋路徑上的某個檔案夾內, Matlab 就會將它當作指令看待。關於搜尋路徑,請看 檔案與路徑 篇。
以下我們舉兩個例子來示範腳本的用法。
以下是某班級一學期的微積分小考成績,每次考試的滿分是 10 分。
假設這是個純文字檔,檔案名稱是 score.txt。
全班有 50 位同學,一學期有 16 次小考,缺考的以 0 分計。
為了節省版面,我們只列出前後幾人的成績。
完整的檔案在 score.txt。
8800001 無名氏 8 10 8 10 8 9 8 6 0 0 7 0 2 0 0 0 8800002 無名氏 8 6 8 5 8 7 5 4 0 10 2 2 2 5 5 0 8800003 無名氏 7 10 8 10 10 10 10 8 5 10 8 4 6 10 5 4 . . . 8800048 無名氏 6 6 6 4 6 9 10 3 0 7 2 2 0 5 2 3 8800049 無名氏 9 6 6 5 10 8 8 9 0 7 5 4 2 10 5 5 8800050 無名氏 5 10 8 10 2 8 10 7 3 4 2 4 4 10 3 0 |
現在,為了某些原因我們要將上述資料送進 Matlab。 一個簡單的方法就是將 score.txt 稍加編輯,使它成為一個腳本程式。 基本步驟是:
G = [ 8800001 8 10 8 10 8 9 8 6 0 0 7 0 2 0 0 0 8800002 8 6 8 5 8 7 5 4 0 10 2 2 2 5 5 0 8800003 7 10 8 10 10 10 10 8 5 10 8 4 6 10 5 4 . . . 8800048 6 6 6 4 6 9 10 3 0 7 2 2 0 5 2 3 8800049 9 6 6 5 10 8 8 9 0 7 5 4 2 10 5 5 8800050 5 10 8 10 2 8 10 7 3 4 2 4 4 10 3 0 ]; |
>> score >> whos Name Size Bytes Class A 50x17 6800 double array Grand total is 850 elements using 6800 bytes |
>> B=G(:,2:17)'; >> B=sort(B); >> g=round(mean(B(5:16, :))*4); |
當然,上述工作也可以用其他工具軟體完成,例如微軟的試算表 Excel。 我個人認為,如果一切從 0 開始,Excel 比較容易完成這份工作。 如果已經能夠熟練使用編輯器和 Matlab,則上述流程可以更快速的完成工作。 有興趣的讀者可以自己試試看。 (我在寫這份文件的同時,順便結算了這學期微積分課的平常成績。)
令 r = 2,給定 x0 = 0.1, 我們要執行以下迭代
>> r=2; >> x0=0.1; >> x(1)=x0; >> for n=1:100, x(n+1) = r * x(n) * (1-x(n)); end; >> x(101) ans = 0.5000 >> plot(x) >> axis([1 101 -0.2 1.2]) |
但是我們想要對許多不同的參數 r 和初始值 x0 做同樣步驟的實驗。
則前面的那段 Matlab 指令,每次最多只要修改前兩行,
重新設定 r 或重新設定 x0,
之後的步驟全然不變。
因此,我們可以寫一個 M 檔案,譬如叫 go.m,內容是
x = zeros(1,101); % 將 x 序列歸零 x(1)=x0; for n=1:100, x(n+1) = r * x(n) * (1-x(n)); end; x(101) plot(x) axis([1 101 -0.2 1.2]) |
>> r=2; >> x0=0.75; >> go ans = 0.5000 |
在前面的腳本中,我們看到一個註解。 % 是 Matlab 的一個保留字元,在 % 以後 (含) 的所有字元都被 Matlab 忽略。 所以在 % 之後的文字都可以成為註解文字。
每個 M 檔案從第一行開始的連續註解文字,將會自動成為線上手冊 (on-line menual)。
例如,在 go.m 的最前面幾行寫上
% Input r and 0 < x0 < 1 % This program will iterate r*x*(1-x) 100 times % 注意 r=3 附近的狀況 % % 單維彰寫於 2000/01/07 x = zeros(1,101); % 將 x 序列歸零 . . . |
>> help go Input r and 0 < x0 < 1 This program will iterate r*x*(1-x) 100 times 注意 r=3 附近的狀況 單維彰寫於 2000/01/07 |
單維彰