1. 程式人生 > >MATLAB基礎學習(四)-判斷與流程控制

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,他們之間可以進行邏輯運算,運算子有:&&與;||或;~非。這裡需要注意:

1)~單獨使用表示非運算,要區別於不等於~=的連用2)如果是高階函式的判斷配合非運算,也可以實現判斷,例如

  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作為迴圈,相當於流程圖的反向箭頭。

2.1if判斷    語法是:

  1. if 邏輯變數1
    •     執行語句1
      • elseif 邏輯變數2
        •     執行語句2
          • else
            •     執行語句3
              • end

其含義與C語言中一致,是順序判斷,即逐個if或者elseif進行判斷,若邏輯變數為1,則執行語句,若為0則進行下一個判斷。其中邏輯變數經常用多個邏輯變數的邏輯運算結果來代替,例如我們經常看到的是

  1. if x>1 && y>1

而不是先賦值再判斷的

  1. a=(x>1) && (y>1)
    • if a

其實這兩種方法是等效的。有時候為了書寫和註釋,也會先定義一個邏輯變數flag,然後再if flag。2.2switch判斷    switch的語法是:

  1. switch 數值變數1
    • case 數值1
      •     執行語句1
        • case 數值2
          •     執行語句2
            • otherwise
              •     執行語句3
                • end

switch與if最大的不同是,switch只進行一次判斷,即根據數值變數1的值來決定執行哪一個case,而不像if會判斷多個elseif。需要強調的是,只有當數值變數1==數值1時,才會執行語句1,而之前說過,==這個判斷是有舍入誤差的,因此switch一般用於數值變數1只取整數時,比如sfun的判斷。對初學者而言,也可以先無視switch。2.3for迴圈    for迴圈的語法是:

  1. 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語句中

  1. for a=初始值:步長:終值

則在執行語句中,a是一個遍歷初值到終值的1*1矩陣。2.4while迴圈    while語句的語法是:

  1. while 邏輯變數
    •     執行語句
      • end

其含義是,當邏輯變數為1時,執行語句,直到邏輯變數為0,因此while的執行語句中,一定有改變邏輯變數的部分,否則就是死迴圈。比如寫了while a<10,就一定會在執行語句中有類似a=a+1這樣的賦值語句,使得若干次迴圈後,邏輯變數為0。總體而言,while並不如for穩定,所以初學者也可以無視while。