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)如果是高级函数的判断配合非运算,也可以实现判断,例如

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判断
语法是:
if 逻辑变量1
执行语句1
elseif 逻辑变量2
执行语句2
else
执行语句3
end

其含义与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

switch与if最大的不同是,switch只进行一次判断,即根据数值变量1的值来决定执行哪一个case,而不像if会判断多个elseif。需要强调的是,只有当数值变量1==数值1时,才会执行语句1,而之前说过,==这个判断是有舍入误差的,因此switch一般用于数值变量1只取整数时,比如sfun的判断。对初学者而言,也可以先无视switch。

2.3for循环
for循环的语法是:
for 数值变量=向量
执行语句
end

其含义是,数值变量会取向量中的每一个值,然后执行语句,在执行语句中,数值变量是一个1*1的矩阵。比如

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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

摸鱼的杰哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值