一、MATLAB的控制流
与其他平台或语言类似,MATLAB中控制流结构包括:
顺序控制、if-else-end分支结构、switch-case结构、try-catch结构、for循环结构和while循环结构
1.顺序结构
新建一个脚本文件(.m文件)、命名并保存
1 2 3 4 5 6 |
%计算圆的面积 %r:圆的半径 %S:圆的面积 r = 5; S = pi * r * r; fprintf('面积是%f\n',S); |
点击运行标志或按F5,此时返回命令行窗口,可以看见如下字样
1 2 |
>> TEMP 面积是78.539816 |
TEMP是我刚才创建的文件名,接着下面一行是运行结果
2.if-else-end分支结构
常见的三种用法如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
if expression commands end if expression commands1 else commands2 end if expression1 commands1 elseif expression2 commands2 ... else commandsn end |
举例如下,判断一个数字是否大于0.5:
1 2 3 4 5 6 |
Rand_a = rand(1); if Rand_a > 0.5 Rand_b = Rand_a else Rand_b = 1-Rand_a end |
运行结果如下:
1 2 3 4 5 |
>> TEMP Rand_b = 0.8147 |
3.switch-case结构
在脚本文件中写入如下代码,点击运行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
num = input('enter''num'':'); switch num case 1 data = 'Monday' case 2 data = 'Tuesday' case 3 data = 'Wednesday' case 4 data = 'Thursday' case 5 data = 'Friday' case 6 data = 'Saturday' case 7 data = 'Sunday' otherwise data = 'Wrong!!' end |
返回命令行窗口
1 2 |
>> TEMP enter'num': |
例如输入数字5,点击回车
1 2 3 4 5 6 |
>> TEMP enter'num':5 data = Friday |
注:与C语言相比,MATLAB中的switch结构不用输入冒号分号,也不用default但是用otherwise
input函数表示输入,当M文件运行到此处时会暂停,等待来着命令行窗口的输入信息,输入完成后要点击‘Enter’
4.try-catch结构
try-catch结构的具体用法如下:
1 2 3 4 5 |
try command1 catch command2 end |
- 只有当MATLAB执行命令组1错误时,才会执行命令组2,即命令组2是命令组1的备用程序
- 当命令组1出错时,可用lasterr函数函数查询出错原因。若返回空字符串,则表明没有错误
- 若命令组1和2都有错,则MATLAB会终止该结构
举例如下,在M文件中输入以下程序
1 2 3 4 5 6 7 8 |
num = 6; Mat = magic(4) try Mat_num = Mat(num,:) catch Mat_end = Mat(end,:) end lasterr |
点击运行,返回命令行窗口
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
>> TEMP Mat = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1 Mat_end = 4 14 15 1 ans = 索引超出矩阵维度。 |
5.for循环结构
举例如下,求x = sin(nkpi/360)的值,其中 n 属于1 : 10, k属于1 : 4:
1 2 3 4 5 6 7 |
x = []; for n = 1:1:10 for k = 1:1:4 x(n,k) = sin((n*k*pi)/360); end end x |
运行结果如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
>> TEMP x = 0.0087 0.0175 0.0262 0.0349 0.0175 0.0349 0.0523 0.0698 0.0262 0.0523 0.0785 0.1045 0.0349 0.0698 0.1045 0.1392 0.0436 0.0872 0.1305 0.1736 0.0523 0.1045 0.1564 0.2079 0.0610 0.1219 0.1822 0.2419 0.0698 0.1392 0.2079 0.2756 0.0785 0.1564 0.2334 0.3090 0.0872 0.1736 0.2588 0.3420 |
注:程序中分号的有无直接影响着输出内容的多少
MATLAB中for循环不用加括号,但是每一级for循环都需要对应end指令
冒号’:’是一种基础符号,1:10表示间隔为1、从1到10的一个数组;1:2:10是间隔为2的数组
6.while循环结构
同其他语言一样,while循环主要用在一个逻辑条件下重复执行且次数不定的条件,这是它与for循环的最大区别。其基本用法如下
1 2 3 |
while expression commands end |
举例如下,求解1:100的和
1 2 3 4 5 6 7 |
i = 1; sum = 0; while i<101 sum = sum+i; i = i+1; end sum |
结果如下
1 2 3 4 5 |
>> TEMP sum = 5050 |
二、控制流的常用指令
1.return指令
- 通常,在被调用函数执行完之后,MATLAB会自动将控制权移交给主函数或者命令行(Commands)窗口
- 但是如果在被调用函数中插入return指令,可以强制MATLAB执行该函数并把控制权转移
2.input和keyboard指令
input指令会将MATLAB的控制权暂时转交给用户,用户通过键盘输入数值、字符串、表达式等,并按‘Enter’键将内容输送到工作区
- Value = input(‘message’);将用户输入的内容输入给变量Value。可以输入数值、字符串等各种形式的数据
- Value = input(‘message’,’s’):将用户输入的变量以字符串的形式输送给变量。无论输入什么格式的数据,都会以字符串的形式赋值给变量
指令中‘message’指的是显示在屏幕上的字符串
keyboard指令会将控制权交给用户,用户可以通过键盘输入各种合法的MATLAB指令。只用当用户输入完成,并输入return时,控制权才会返回给MATLAB、
input和keyboard指令的不同之处在于:keyboard指令允许输入任意多个MATLAB指令,而input指令只允许用户输入赋值给变量的‘值’
3.yesinput指令
yesinput指令是一个只能输入的指令,它提供的输入值是一个默认量,并可以对输入范围进行检查,其用法如下
- value = yesinput(‘Prompt’,Default,Possib)
- yesinput指令涉及用户与MATLAB之间的交互,因此无法在notebook程序中运行
- Prompt为文字提示,Default为设置的默认值,Possib为可选项
- 当yesinput指令运行后,若用户不输入任何值,则变量value将接收默认值
4.pause指令
pause指令的功能为控制文件的暂停与恢复
- pause:暂停执行文件,等待用户按任意键继续
- pause(n):在继续执行文件之前,暂停n秒
5.continue指令
continue语句把控制传给下一个在其中出现的if或while循环的迭代,忽略任何循环体中保留的语句。
在循环嵌套中,continue把控制传给下一个for或while循环所嵌套的迭代
1 2 3 4 5 6 7 8 9 10 |
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)) |
运行结果:
1 2 |
>> TEMP 31 lines |
5.break指令
在for或while循环中,有时并不需要运行到最后一步循环,用户就已经得到了想要的结果,此时可用break指令来对其循环进行终止
1 2 3 4 5 6 7 8 9 |
a(1) = 1; a(2) = 1; n = 1000; for i = 3:n a(i) = a(i-1) + a(i-2); if(a(i) > 9999) [i a(i)] break end end |
运行结果:
1 2 3 4 5 |
>> TEMP ans = 21 10946 |
转载请注明:燕骏博客 » MATLAB自学笔记(十一):MATLAB编程基础2-控制流
赞赏作者微信赞赏支付宝赞赏