前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Matlab系列之程序控制

Matlab系列之程序控制

作者头像
狂人V
发布2020-07-14 20:32:55
1.1K0
发布2020-07-14 20:32:55
举报
文章被收录于专栏:电子狂人电子狂人

在Matlab中,具有四类程序控制结构方式,依次是:条件控制、循环控制、误差控制和程序终止,接下来一一对其进行介绍。

1 条件控制语句

在编写程序时,会根据需要,使用不同的条件控制语句,可以是判断语句也可以是分支语句。

判断语句

看到名字,我想你也已经猜到了一些东西,写过C或者其他相关程序的,都知道一种条件判断语句,也就是if语句,在Matlab中通常使用if-else-end分支结构,包含单分支、双分支和多分支3种形式,结构比较简单。

单分支如下:

代码语言:javascript
复制
if 逻辑表达式
    执行代码块;
end

双分支:

代码语言:javascript
复制
if 表达式
    执行代码块1;
else
    执行代码块2;
end

多分支:

代码语言:javascript
复制
if 表达式1
    执行代码块1;
else if 表达式2
    执行代码块2;
else
    执行代码块3;
end

以上3种分支结构实现都是一样,当逻辑表达式或者表达式为真时(逻辑表达式为非空数组、为非零变量、矩阵变量所有元素都非零都为真)则进入相应表达式下的执行代码块,然后结束;若为假,则进入下一级表达式判断,直至判断结束。

分支语句

可能看到名字,你会有点陌生,但是看到switch后,你是否就恍然大悟了呢~

其结构:

代码语言:javascript
复制
switch 表达式(标量或字符串)
    case value1
        执行代码块1;
    case value2
        执行代码块1;
        ...............
    otherwise
    执行代码块N;
end

结构表达很简单,当表达式是一个标量时,就与相应的value进行比较,然后进入对应的执行代码块,例如和value1相等,就执行代码块1;和value2相等,就执行代码块2;如果所有的value都不与之相等,则进入otherwise执行相应的的代码块;如果表达式是一个字符串,也是一样的比较,只是MATLAB在比较时会自动调用strcmp函数,也就是字符串比较的函数,从而实现字符串的比较。

接下来对switch语句做个简单使用:

程序:

代码语言:javascript
复制

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的值,然后运行脚本进行判断结果的输出:

2 循环控制语句

相信大家对于循环语句就更熟悉了,for和while,我想写过程序的都用过;在MATLAB中的表达可能会和一些语言的表达形式不太一样,但是使用的效果一致,for的结构为:

代码语言:javascript
复制
for 循环变量=开始值:增量:结束值
    循环体
end

增量默认为1,可以设置为任何值,其他的使用与C或者相关语言的一致。

演示下嵌套的使用

程序:

代码语言:javascript
复制
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语句是通过判断条件表达式的真假性,从而实现循环;

其结构为:

代码语言:javascript
复制
while 条件表达式
    循环体
end

直接演示一个程序:

代码语言:javascript
复制
n=1;
while prod(1:n)<1e100< span="">
    n=n+1;
end

结果:

这个程序的作用就是计算n!<1e< span="">100的最大n值,其中的prod就是实现数组元素的乘积,当小于1e100的时候,n就进行累加,直至得到最大的n值。

3 误差控制语句

我看到这个名字的第一眼,其实也是很懵逼的,为什么叫误差控制呢?然后学了之后就懂意思了,大概是这样的,类似条件判断语句,如果if的表达式不对,就进行下一个的判断或者直接运行else中的代码块,只是误差控制语句变成来try-catch-end的样子,具体结构:

代码语言:javascript
复制
try
    程序代码块1,%总被执行,若正确,即跳出此结构
catch
    程序代码块2,%仅当程序代码块1出现错误,该代码块才被执行
end

如果程序代码块2也错了,则会终止运行的程序,若还有其他try-catch-end的语句,就会继续运行下一个try-catch-end,并且可以使用laster命令查看发生错误的原因(查看上一处错误),演示一段程序:

代码语言:javascript
复制
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语句中代码块是使用逗号隔开的,而不是分号!!!

4 程序终止语句

在程序设计中通常需要提前终止循环、结束程序的运行、显示错误信息等情况,在MATLAB中,就具有continue、break、return、error等语句,接下来对其进行简单的介绍。

4.1 continue语句

该语句常用于循环控制中,使得当次的循环结束,继续下一次循环,并不是结束整个循环,直接做个演示:

代码语言:javascript
复制
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”打卡该文件进行结果的比对:

4.2 break语句

该语句虽然也是用于循环控制的,但是它的功能是直接中断当前的循环,不再执行该循环的任何操作,程序演示:

代码语言:javascript
复制
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文件进行对比,会发现,在有空行时,就结束了文件内容的打印,关于文件的操作,会在之后的记录中出现,如果有不懂的地方,可以过段时间再来理解。

4.3 return语句

该语句就是将结束正在运行的函数,并且返回调用函数,一般是在函数的末尾正常结束函数的运行,也可以是在满足某种条件的时候强制结束函数运行并返回调用函数,这个就不做程序的演示了。

4.4 error语句

该语句理解更简单,就是直接终止当前函数的运行,并且显示出错信息,运行程序出错的时候那一串红色的字很醒目吧,那就是使用error产生的,当然warning就是使用warning语句了,使用语法:error('error message!!!')

结果:

还有一些语句,因为时间关系就不做介绍了,不过都比较简单,有的在之前也有过介绍,剩下的可以自行使用帮助系统进行学习使用,有input、keyboard、pause...

END

今天的内容中,如果遇到不懂的命令,我也没有对其进行讲解的,之后我讲到其他内容时可能会继续讲到,比如文件操作的相关,如果可以的话,命令行help挺好的。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-07-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 电子狂人 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 条件控制语句
  • 2 循环控制语句
  • 3 误差控制语句
  • 4 程序终止语句
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档