matlab中if语句多个_Matlab系列之程序控制

7d35e7dfdf02486b1e7695de21b3909a.gif

经过前几篇的学习,我想对于Matlab的两种M文件都已经清楚各自的功能并对函数的相关知识有了一定的了解,今天这篇将对Matlab的程序控制结构进行学习,首先要知道在Matlab中,具有四类程序控制结构方式,依次是:条件控制、循环控制、误差控制和程序终止,接下来一一对其进行介绍。

~Show Time~

1254534a654a9c6948e76916c6b07653.gif

1

条件控制语句

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

判断语句

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

单分支如下:

if 逻辑表达式    执行代码块;end

双分支:

if 表达式    执行代码块1;else    执行代码块2;end

多分支:

if 表达式1    执行代码块1;else if 表达式2    执行代码块2;else    执行代码块3;end

1254534a654a9c6948e76916c6b07653.gif

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

12bf408d312f047ea8a801cc72a0e4e8.png

2

循环控制语句

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

for 循环变量=开始值:增量:结束值    循环体end

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

演示下嵌套的使用

程序:

for m=1:3    for n=1:5       A(m,n)=1/(m+n-1)    endend

分析:

96f0ec75a3576e3de0616d3fd6212e9c.png

第1、2行代表的就是建立一个3行5列的矩阵,第3行就是具体构建m行n列的矩阵并进行对应元素赋值操作。

结果:

6932395db2abb76b1a91bde54ae4e7c3.png

1254534a654a9c6948e76916c6b07653.gif

while语句是通过判断条件表达式的真假性,从而实现循环;

其结构为:

while 条件表达式    循环体end

直接演示一个程序:

n=1;while prod(1:n)<1e100< span="">    n=n+1;end

结果:

1349467317d701a4446b443048145bd2.png

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

1254534a654a9c6948e76916c6b07653.gif

3

误差控制语句

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

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

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

n=4;A=pascal(3);tryA_n=A(n,:),catchA_end=A(end,:),end

结果:

89bc99613bb30ec2bf283c0d290e4278.png

分析:使用pascal(3)构建了一个3x3的三角形矩阵,但是n=4,因此A_n=A(n,:)这一部分的代码相当于是错的,所以进入下一部分,即A_end=A(end,:),然后将最后一行赋值并显示在窗口。

注意:try-catch-end语句中代码块是使用逗号隔开的,而不是分号!!!

1254534a654a9c6948e76916c6b07653.gif

4

程序终止语句

在程序设计中通常需要提前终止循环、结束程序的运行、显示错误信息等情况,在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;enddisp(sprintf('%d lines',count));

结果,显示除去空行以及注释行后的代码行数,其中magic是系统内置的一个文件,可以直接在命令窗口行输入“open magic.m”打卡该文件进行结果的比对:

5c064e286d99c7c0b92c0c662f1483de.png

2、break语句

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

fid=fopen('fft.m','r');s='';while ~feof(fid)    line=fgetl(fid);    if isempty(line),break,end    s=strvcat(s,line);enddisp(s)

结果:

166c0ca26d648c5e3c3d9a7dc23cdef5.png

分析:打开fft.m文件进行对比,会发现,在有空行时,就结束了文件内容的打印,关于文件的操作,会在之后的记录中出现,如果有不懂的地方,可以过段时间再来理解。

3、return语句

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

4、error语句

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

结果:

3b849199fdc8a727a940edc4d358f595.png

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

END

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

fec7b2af61ea7dedf8a84eec1115b703.gif

阅读本文共使用 9a1eea8ea6e048b878b8eda3db899e46.gif f9c51312ffd9a5932b6ca99f0eac18b0.gif 4fa5bbca9ef795ca5cd8f00c995a0786.gif 25b206a30ab0af3301fdab05e85fb834.gif

6e54b9b826f1d15c2f432bf291ecfdd2.gif

896abe764df3b849d4ef02cdfa64b05c.gif

0451e922ee66ca940b44fe77aba98377.png

6e54b9b826f1d15c2f432bf291ecfdd2.gif

abeb351dbb9f35aebceb54cd266a4231.gif

电子知识

一些电路设计与DIY作品

电子设计技巧与经验

FPGA

System Generator系列教程

算法介绍

通信协议分析

资料分享

Matlab系列记录

建设中~

d636806b2e688d6d6a8431cec3406626.gif

点个赞

69e886eb6c2d798506b32e46e943e45c.gif

再走吧

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值