经过前几篇的学习,我想对于Matlab的两种M文件都已经清楚各自的功能并对函数的相关知识有了一定的了解,今天这篇将对Matlab的程序控制结构进行学习,首先要知道在Matlab中,具有四类程序控制结构方式,依次是:条件控制、循环控制、误差控制和程序终止,接下来一一对其进行介绍。
条件控制语句
在编写程序时,会根据需要,使用不同的条件控制语句,可以是判断语句也可以是分支语句。
判断语句
看到名字,我想你也已经猜到了一些东西,写过C或者其他相关程序的,都知道一种条件判断语句,也就是if语句,在Matlab中通常使用if-else-end分支结构,包含单分支、双分支和多分支3种形式,结构比较简单。
单分支如下:
if 逻辑表达式
执行代码块;
end
双分支:
if 表达式
执行代码块1;
else
执行代码块2;
end
多分支:
if 表达式1
执行代码块1;
else if 表达式2
执行代码块2;
else
执行代码块3;
end
以上3种分支结构实现都是一样,当逻辑表达式或者表达式为真时(逻辑表达式为非空数组、为非零变量、矩阵变量所有元素都非零都为真)则进入相应表达式下的执行代码块,然后结束;若为假,则进入下一级表达式判断,直至判断结束。
分支语句
可能看到名字,你会有点陌生,但是看到switch后,你是否就恍然大悟了呢~
其结构:
switch 表达式(标量或字符串)
case value1
执行代码块1;
case value2
执行代码块1;
...............
otherwise
执行代码块N;
end
结构表达很简单,当表达式是一个标量时,就与相应的value进行比较,然后进入对应的执行代码块,例如和value1相等,就执行代码块1;和value2相等,就执行代码块2;如果所有的value都不与之相等,则进入otherwise执行相应的的代码块;如果表达式是一个字符串,也是一样的比较,只是MATLAB在比较时会自动调用strcmp函数,也就是字符串比较的函数,从而实现字符串的比较。
接下来对switch语句做个简单使用:
程序:
switch value
case 1
disp('1');
case {2,3,4}
disep('2 or 3 or 4');
case 5
disp('5')
otherwise
disp('Other number');
end
手动输入一个value的值,然后运行脚本进行判断结果的输出:
循环控制语句
相信大家对于循环语句就更熟悉了,for和while,我想写过程序的都用过;在MATLAB中的表达可能回和一些语言的表达形式不太一样,但是使用的效果一致,for的结构为:
for 循环变量=开始值:增量:结束值
循环体
end
增量默认为1,可以设置为任何值,其他的使用与C或者相关语言的一致。
演示下嵌套的使用
程序:
for m=1:3
for n=1:5
A(m,n)=1/(m+n-1)
end
end
分析:
第1、2行代表的就是建立一个3行5列的矩阵,第3行就是具体构建m行n列的矩阵并进行对应元素赋值操作。
结果:
while语句是通过判断条件表达式的真假性,从而实现循环;
其结构为:
while 条件表达式
循环体
end
直接演示一个程序:
n=1;
while prod(1:n)<1e100
n=n+1;
end
结果:
这个程序的作用就是计算n!<1e100的最大n值,其中的prod就是实现数组元素的乘积,当小于1e100的时候,n就进行累加,直至得到最大的n值。
误差控制语句
我看到这个名字的第一眼,其实也是很懵逼的,为什么叫误差控制呢?然后学了之后就懂意思了,大概是这样的,类似条件判断语句,如果if的表达式不对,就进行下一个的判断或者直接运行else中的代码块,只是误差控制语句变成来try-catch-end的样子,具体结构:
try
程序代码块1,%总被执行,若正确,即跳出此结构
catch
程序代码块2,%仅当程序代码块1出现错误,该代码块才被执行
end
如果程序代码块2也错了,则会终止运行的程序,若还有其他try-catch-end的语句,就会继续运行下一个try-catch-end,并且可以使用laster命令查看发生错误的原因(查看上一处错误),演示一段程序:
n=4;
A=pascal(3);
try
A_n=A(n,:),
catch
A_end=A(end,:),
end
结果:
分析:使用pascal(3)构建了一个3x3的三角形矩阵,但是n=4,因此A_n=A(n,:)这一部分的代码相当于是错的,所以进入下一部分,即A_end=A(end,:),然后将最后一行赋值并显示在窗口。
注意:try-catch-end语句中代码块是使用逗号隔开的,而不是分号!!!
程序终止语句
在程序设计中通常需要提前终止循环、结束程序的运行、显示错误信息等情况,在MATLAB中,就具有continue、break、return、error等语句,接下来对其进行简单的介绍。
1、continue语句
该语句常用于循环控制中,使得当次的循环结束,继续下一次循环,并不是结束整个循环,直接做个演示:
fid=fopen('magic.m','r');
count=0;
while ~feof(fid)%判断是否为文本的最后一行
line=fgetl(fid);%读取当前文本中当前行的下一行
if isempty(line)|strncmp(line,'%',1)%判断是否是空行或者注释(判断%号即可)
continue%若是空行或者注释就退出当次循环
end
count=count+1;
end
disp(sprintf('%d lines',count));
结果,显示除去空行以及注释行后的代码行数,其中magic是系统内置的一个文件,可以直接在命令窗口行输入“open magic.m”打卡该文件进行结果的比对:
2、break语句
该语句虽然也是用于循环控制的,但是它的功能是直接中断当前的循环,不再执行该循环的任何操作,程序演示:
fid=fopen('fft.m','r');
s='';
while ~feof(fid)
line=fgetl(fid);
if isempty(line),break,end
s=strvcat(s,line);
end
disp(s)
结果:
分析:打开fft.m文件进行对比,会发现,在有空行时,就结束了文件内容的打印,关于文件的操作,会在之后的记录中出现,如果有不懂的地方,可以过段时间再来理解。
3、return语句
该语句就是将结束正在运行的函数,并且返回调用函数,一般是在函数的末尾正常结束函数的运行,也可以是在满足某种条件的时候强制结束函数运行并返回调用函数,这个就不做程序的演示了。
4、error语句
该语句理解更简单,就是直接终止当前函数的运行,并且显示出错信息,运行程序出错的时候那一串红色的字很醒目吧,那就是使用error产生的,当然warning就是使用warning语句了,使用语法:error('error message!!!')
结果:
还有一些语句,因为时间关系就不做介绍了,不过都比较简单,有的在之前也有过介绍,剩下的可以自行使用帮助系统进行学习使用,有input、keyboard、pause...