1.4 循环和判断语句
在完成一些比较复杂的运算时,往往需要用到循环和分支等逻辑语言结构,这就是MATLAB中的控制流结构。MATLAB提供了for循环、while循环等循环语句,以及逻辑判断结构if-else-end等。
首先介绍for循环。for循环用于让某个语句或一组语句被重复执行指定次数。比如对1到50之间的数字求和,可以使用如下循环语句实现:
>> clear >> s=0; >> for i=1: 50; s=s+i; end >> s s= 1275
在上面的代码中,首先为变量s赋予初始值0,每次增量为1,循环50次,输出结果就是1到50之间的数字之和。
再比如计算n=1, 2, 3, 4, 5时的sin(π/n)值,输入如下代码:
>> for n=1: 5; x(n)=sin(pi/n); end
即可算出所有结果。如果需要输出单个计算结果,输入命令x(n)即可,n为1至5中的某个数字,比如求x(2):
>> x(2) ans= 1
也可以输出全部计算结果,输入命令x,然后按回车键即可。
>> x x= 0.0000 1.0000 0.8660 0.7071 0.5878
接下来介绍while循环。前面介绍的for循环是让某个或一组语句执行指定次数,如果需要设定一个更宽泛的结束循环的条件,则可以选择while循环。比如,某国现有人口4.5亿人,年增长3%,什么时候会达到5亿人?输入如下代码:
>> m=4.5; >> t=0; >> while m<5 t=t+1 m=m∗(1+0.03) end
输出结果为:t=1时m=4.6350, t=2时m=4.7740, t=3时m=4.9173, t=4时m=5.0648。因此,4年后人口会达到5亿人。
很多编程语言中都存在类似“如果某个条件满足,则执行某个指令”的逻辑判断-执行语句,MATLAB中也有类似的结构,这就是if-end结构。比如,在定义分段函数时,就可以运用if-end结构。
对于如下分段函数:
求其在定义域内任何一点的函数值,我们可以建立如下的M文件,并将其命名为fdhs. m:
function f=fdhs(x) if x<0 f=2∗x+sin(x) end if x>=0 f=exp(x)-1 end
计算和f(0),可以在命令窗口输入fdhs(-pi/2),得到ans=-4. 1416;输入fdhs(0),得到ans=0。
如果选项比较多,则可以用多个if-end语句覆盖全部选项。如果函数只有两个选项,则可以采用if-else-end结构:
function f=fdhs(x) if x<0 f=2∗x+sin(x) else f=exp(x)-1 end
选项较多时,也可以使用if-elseif-elseif-end结构。比如对于分段函数:
可以反复使用if-end语句:
function f=fdhs(x) if x<-1 f=-1 end if x>=-1&x<=1 f=0 end if x>1 f=1 end
也可以运用if-elseif-elseif-end语句:
function f=fdhs(x) if x<-1 f=-1 elseif x>=-1&x<=1 f=0 elseif x>1 f=1 end
两种语句输出的结果完全一致,后者需要输入的代码会少一些。
MATLAB中还有其他控制流结构,在面对不同问题时各有各的优势,这里不再赘述。