Matlab系列之程序控制

经过前几篇的学习,我想对于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...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值