MATLAB基礎學習(四)-判斷與流程控制
判斷常用於數學中的分段問題,更為複雜的問題則需要流程控制。本篇介紹matlab中的相關語法,這些語法並不難,但卻很容易混淆,一方面是和其他語言,例如C語言混淆;另一方面是和matlab自身的其他語句,例如賦值混淆。1.邏輯變數1.1邏輯變數的賦值 有些語言中,邏輯變數是一種專門的變數型別,其值為true或者false,matlab中也有這個型別,但其值為1或者0。賦值方式是“變數名=表示式”,變數名的命名規則與數值變數一樣,表示式是一種判斷,比如數值大小的判斷,或者高階函式的判斷。例如輸入
a=1>2
就定義一個邏輯變數a,其值是0,表示false,在workspace裡可以看見a的型別是logical。
對初學者,可以認為數值大小的判斷,是指兩個1*1維的數值變數的比較。數值大小比較的方法有:>大於;<小於;>=大於等於;<=小於等於;==等於;~=不等於6種。因為數值計算有舍入誤差,所以等於這個判斷,有時需要用
abs(x1-x2)<eps
這樣的不等式來代替,其中eps是matlab中最小的非零數值,相當於舍入誤差的標準。
高階函式的判斷,是指系統自帶的一些函式,例如
a=isprime(x)
用來判斷x是否為質數,
a=exist(x)
用來判斷是否存在變數、函式或者檔案。1.2邏輯變數的邏輯運算邏輯變數的取值只有0或者1,他們之間可以進行邏輯運算,運算子有:&&與;||或;~非。這裡需要注意:
- a=~isprime(x)
就相當於判斷x是否為合數1.3邏輯變數的數值運算 matlab中邏輯變數可以參與數值運算,參與時,會被數值0和1代替。例如
a=1>2
生成一個邏輯變數a,則
b=a+1
時,matlab會判斷正在進行數值運算,然後將邏輯變數a轉化成數值變數,由於a在邏輯變數時表示false,所以轉化時,a相當於數值變數0,因此會得到數值變數b=0+1=1。2.流程控制 matlab的流程控制和C語言類似,if和switch作為判斷依據,相當於流程圖的菱形框,for和while作為迴圈,相當於流程圖的反向箭頭。
- if 邏輯變數1
- 執行語句1
- elseif 邏輯變數2
- 執行語句2
- else
- 執行語句3
- end
- 執行語句3
- else
- 執行語句2
- elseif 邏輯變數2
- 執行語句1
其含義與C語言中一致,是順序判斷,即逐個if或者elseif進行判斷,若邏輯變數為1,則執行語句,若為0則進行下一個判斷。其中邏輯變數經常用多個邏輯變數的邏輯運算結果來代替,例如我們經常看到的是
- if x>1 && y>1
而不是先賦值再判斷的
- a=(x>1) && (y>1)
- if a
其實這兩種方法是等效的。有時候為了書寫和註釋,也會先定義一個邏輯變數flag,然後再if flag。2.2switch判斷 switch的語法是:
- switch 數值變數1
- case 數值1
- 執行語句1
- case 數值2
- 執行語句2
- otherwise
- 執行語句3
- end
- 執行語句3
- otherwise
- 執行語句2
- case 數值2
- 執行語句1
- case 數值1
switch與if最大的不同是,switch只進行一次判斷,即根據數值變數1的值來決定執行哪一個case,而不像if會判斷多個elseif。需要強調的是,只有當數值變數1==數值1時,才會執行語句1,而之前說過,==這個判斷是有舍入誤差的,因此switch一般用於數值變數1只取整數時,比如sfun的判斷。對初學者而言,也可以先無視switch。2.3for迴圈 for迴圈的語法是:
- for 數值變數=向量
- 執行語句
- end
- 執行語句
其含義是,數值變數會取向量中的每一個值,然後執行語句,在執行語句中,數值變數是一個1*1的矩陣。matlab中程式換行有兩種方法,第一種方法,只能從第一行換到第二行,具體操作如下,首先在第一行中寫完命令之後按下空格鍵,然後再按下數字鍵盤上的小數點鍵,小數點數目為3,之後按下enter鍵就可以實現換行。 ...+Enter;第二種方法,直接按住Shift+Enter鍵可以直接實現換行
for a=[0 1 3]
則會讓a=0,執行語句,然後a=1,執行語句,最後a=3,執行語句。這裡容易和賦值語句混淆,因為a=[0 1 3]是一個數值變數賦值,賦值後a是個向量,但加上了for後,a是1*1矩陣。另外,在數值變數賦值那段,我們說過有一種常用的賦值方法是"a=初始值:步長:終值",其結果是把a賦值成一個向量,因此這也廣泛用於for語句中
- for a=初始值:步長:終值
則在執行語句中,a是一個遍歷初值到終值的1*1矩陣。2.4while迴圈 while語句的語法是:
- while 邏輯變數
- 執行語句
- end
- 執行語句
其含義是,當邏輯變數為1時,執行語句,直到邏輯變數為0,因此while的執行語句中,一定有改變邏輯變數的部分,否則就是死迴圈。比如寫了while a<10,就一定會在執行語句中有類似a=a+1這樣的賦值語句,使得若干次迴圈後,邏輯變數為0。總體而言,while並不如for穩定,所以初學者也可以無視while。