讲解视频:可以在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,下面给出简化后的代码: