?講解視頻:可以在bilibili搜索《MATLAB教程新手入門篇——數學建模清風主講》。?
MATLAB教程新手入門篇(數學建模清風主講,適合零基礎同學觀看)_嗶哩嗶哩_bilibili
節選自?第4章:MATLAB程序流程控制
if、elseif、else和end是MATLAB中的四個關鍵字,在第二章中我們強調過:不能定義與MATLAB關鍵字同名的變量。這四個關鍵字就構成了我們要學的第一種條件語句,后續我們將其簡稱為if語句。
易錯點:elseif關鍵字中間不能加空格,不能寫成else if,這和C、Java等語言不同。
注意:在使用if語句時,if和end這兩個關鍵字是無論如何都不能省略的。有很多新手在使用MATLAB時都會漏掉end這個關鍵字,導致后續無論輸入什么命令MATLAB都沒有反應,而elseif和else可以根據自己的需要來決定是否添加。
下面我們先看一個完整的if語句的示例(假設有四個分支),其對應的流程圖見右側:
注意,這里的語句1、語句2、語句3和語句4最終只能有一個被執行。如果表達式1成立(通常表達式返回一個邏輯值,值為邏輯值1則表示成立),則執行語句1,后面的表達式都不用判斷,它們對應的語句也都不會被執行;如果表達式1不成立,則會接著判斷表達式2是否成立,如果表達式2成立則會執行語句2,否則會接著判斷表達式3是否成立,如果表達式3成立則會執行語句3,如果表達式3也不成立則會執行語句4。
我們舉一個具體的例子:計算分段函數
你可以將這個分段函數想象成如下場景:給定一個同學的成績(假設為整數),輸出這個同學的等級。等級規則如下:90至100分為1級、80至89分為2級、60至79分為3級、低于60分為4級;如果成績小于0分或者大于100分,則代表成績輸入有誤,此時等級為0。
那么,應該怎樣用MATLAB表示這個分段函數呢?不熟練的同學可以先畫一個流程圖,其對應的MATLAB代碼如右側所示:
上面代碼中有一些要說明的點:
(1)判斷x是否位于[90,100]這個區間時,不能寫成90<=x<=100,MATLAB不支持這種連續的判斷。因此我們將其拆分成兩個條件:x>=90 && x<=100。這里用的是具有短路功能的邏輯與運算符&&,這樣判斷效率會更高。
(2)if只能有一個,但elseif可以有多個,它們后面都需要跟上相應的判斷條件。只有在if后面的條件不滿足時,才會判斷elseif后面的條件是否成立。
(3)else后面不能加上條件,當if和elseif后面的條件全部都不滿足時,才會執行else對應的語句。
(4)不需要在if、elseif、else和end所在的行的最后面添加冒號或者分號。
另外,假設我們不考慮輸入有誤的情況,即確保x的取值范圍在0至100之間時,我們可以對if和elseif后面的判斷條件進行簡化。顯然,可以去掉if后面的x<=100,因為x的取值范圍已經固定了;elseif后面的條件也能被簡化,以第一個為例,原來代碼中的判斷條件寫的是x>=80 && x<90,實際上我們可以直接寫成x>=80,這是因為只有當前面的判斷條件都不成立時才會到達當前的判斷條件,而前面的判斷條件不成立時意味著x<90。類似地,第二個elseif后面的條件都能簡化成x>=60,下面給出簡化后的代碼: