Matlab 教材:保留字、算子和函式

Matlab 套裝軟體提供了一套程式語言, 而程式語言就是由

組成的。保留字通常是被用來當作流程控制的字串, 我們目前所知的,有以下這些

if else end for
while break

還有一些保留字是我們現在不知道的,但是已經很少了。 程式語言的保留字並不太多。

算子都是以符號組成,我們現在知道不少算子,大致複習一下,有

= + - * / ^ ;
( ) [ ] , :
' .' .* ./ .^ < > <= >=
== ~= & | ~

還有一些算子是我們現在不知道的,但是已經很少了。 程式語言的算子也不太多。

Matlab 的函式就非常多了。 少部份最重要、最通用的函式放在「核心」裡面,稱為「內建函式」 (built-in function),其他的放在「工具箱」裡面,稱為「外掛函式」。 如何檢查一個函式是為內建還是外掛?用 which 後面跟著一個函式名,例如

which sin
看到回應 sin is a built-in function. 所以知道 sin() 是內建函式。而
which trace
which rankwhich dot 得到一個檔案的絕對路徑, 這就表示 trace()rank()dot() 都是外部函式,外部函式寫在所謂的 M-file 裡面, 您看到的檔案全名也就是 M-file 的檔案名。

如果您在 [Matlab 的搜尋路徑] 那一節安裝了 foo.m 或是 eigshow.m, 那麼現在詢問

which foo
會看到 Matlab 回應 foo.m 的絕對路徑。

當 Matlab 看到一個「字」,也就是像 if, sum, xn 這樣的英文字串,它解讀這個「字」的優先順序是

  1. 保留字
  2. 變數名
  3. 函式
所以您不會誤將保留字定義成變數名了。譬如您說
if = 1;
會造成錯誤訊息:if 是保留字,不能被定義成變數。

但是您卻可以將函式名 (不論內建還是外掛) 定義成變數,例如說

sum = 0;
for n=1:100, sum = sum + n; end;
這是可以的,但是這樣做之後 sum 成了一口箱子,其值為 5050, 而如果您又要做
sum(1:100)
就錯了,因為 sum() 函式的名字被變數名取代, Matlab 認為 sum 這個「字」代表一個變數,而不是一個函式。

萬一發生這種情況,只要清除那個同名變數即可。例如說

clear sum
那麼 sum 這個「字」就恢復為內建函式 sum() 的名字。 但是,當然,剛才那個儲存 5050 的變數就不見了。

如果 Matlab 認定某個「字」是函式名字,那麼他按照以下順序去尋找那個函式

  1. 內建函式
  2. 目前工作的檔案夾
  3. 搜尋路徑指定的檔案夾順序
Matlab 執行第一個找到的函式;如果都找不到,就會出現錯誤訊息。 舉例來說,因為 sum() 是內建函式, 如果您自己也寫了一個叫做 sum() 的函式, 則這個新版函式永無出頭之日。所以您如果要自己寫函式, 應避免使用內建函式的名字。

要如何自己寫函式?這是下一節的主題。 要如何知曉內建函式的名字? 那就只有多接觸 Matlab 了,使用久了就自然會知道更多。 必要的時候,用 which 問看看。

習題

  1. Matlab 如何回答 which if?您滿意他的回答嗎? 不滿意也沒辦法啦。
  2. 查詢 help clear 看看如何刪除 Matlab 工作環境內的所有變數? 如何只刪除其中的某兩個?
單維彰 (2004/04/28) --- [Prev] [Next] [Up]