在MATLAB编程中,除了条件语句、循环语句和try-catch语句外,还有一些其他常用的程序流程控制指令,它们能用于实现特定的控制需求,例如:计算程序的运行时长、暂停程序的运行、让用户输入数据、显示警告和报错信息等。
在本节中,我们将介绍以下五个常用指令:
tic 和 toc 是一对用于计时的MATLAB指令,你需要将tic和toc分别放在需要计时的代码段的前面和后面,运行代码后MATLAB就会输出这段代码的运行时长,单位为秒。
事实上,许多题目都可能有多种求解方法,有的方法求解效率很高,代码运行的时长就会更短。例如我们看下面这个例子:
已知A和B都是1000阶的方阵,且A和B的每个元素都是在区间[0,1]上均匀分布的随机数。请计算C矩阵,其中C矩阵的第i行第j列元素:
首先创建A和B这两个随机矩阵:
n = 1000;
A = rand(n, n);
B = rand(n, n);
方法1:使用for循环计算
tic
C1 = zeros(n,n); % 初始化最后的计算结果,提高代码的运行的效率
for i = 1:n
for j = 1:n
if A(i, j) > B(i, j)
C1(i, j) = A(i, j) + B(i, j);
else
C1(i, j) = A(i, j) * B(i, j);
end
end
end
toc
% 历时 0.026510 秒。
方法2:直接使用矩阵运算
tic
C2 = (A > B).*(A+B) + (A <= B).*(A.*B);
toc
%历时 0.001956 秒。
从上面的运行时间可以看出,第二种方法的计算效率远高于第一种方法。这也提示我们,使用循环编程的效率通常较低,更推荐大家使用向量或者矩阵直接运算。
MATLAB官网给出了提高代码性能的常用方法,感兴趣的同学可以点击下面链接了解:
https://ww2.mathworks.cn/help/matlab/matlab_prog/techniques-for-improving-performance.html
pause函数用于暂停程序的运行,当程序运行到该命令时,程序暂时中止。它的调用格式有下面两种:
(1)pause:暂时停止代码的执行,等待用户按任意键继续运行;
(2)pause(n):暂停程序运行n秒。
举个例子,每隔0.5秒在屏幕上输出一个[1,10]上的随机整数,若输出的整数恰好为10,则停止输出。
while 1
% 生成一个区间[1,10]上的随机整数
x = randi([1,10],1);
disp(x) % 输出x
pause(0.5) % 暂停0.5秒
% 判断结果是否为10,若为10则退出循环
if x == 10
break
end
end
下面我们再使用pause函数来绘制一个动态的爱心图形,大家现在只需要学习pause函数的用法即可。
% 创建一个图形窗口
figure('Color','w')
% 主循环,模拟动画
for t = 0:0.01:2*pi
% 计算爱心形状的坐标点
x = 16 * sin(t) .^ 3;
y = 13 * cos(t) - 5 * cos(2*t) - 2 * cos(3*t) - cos(4*t);
% 使用plot函数绘制爱心
plot(x, y, '.r', 'LineWidth', 2);
hold on % 确保在每次迭代时不清空图形窗口
axis([-20 20 -20 20]); % 设置坐标轴范围
axis off % 不显示坐标轴
% 暂停一小段时间
pause(0.0001);
end
hold off
编写MATLAB程序时,有时需要从用户那里获取输入的数据,以便程序根据这些数据执行不同的操作或计算。MATLAB提供了input函数接收来自用户的输入数据,这在创建交互式程序或需要用户提供输入的情况下非常有用。input函数有下面两种调用方式:
第一种方式只需要给一个输入参数,即一个提示用户输入的文本,此时MATLAB的界面会显示这段文本,并等待用户输入值后按回车键确定。用户可以输入10、 pi/4 、 rand(3)、1:10、[1, 2; 3, 4]之类的数据或表达式,还可以输入工作区中已有的变量。
第二种方式有两个输入参数,这时候input会将用户的输入看成文本格式,返回的变量txt是字符向量格式,这对于获取纯文本的输入非常有用。
注意:提示用户输入的文本请使用字符向量(单引号引起来)的形式,如果使用字符串(双引号引起来)则在较低的MATLAB版本中运行会报错。
下面我们举两个例子帮助大家理解。
(1)用户输入圆的半径,然后计算圆的面积。
r = input('请输入圆的半径:');
% r = input("请输入圆的半径:"); % 较低版本的MATLAB会报错,例如MATLAB2017a版本
area = pi*r*r
运行完上面这段代码后,MATLAB的命令行窗口会出现相应地提示:
同时, MATLAB的左下角会显示:
如果我们输入10,那么MATLAB会返回area的计算结果:
从这个例题我们可以看出,当MATLAB遇到input语句时,会暂停程序的运行并等待用户的输入,等用户输入完毕后才会继续执行后续的代码。
(2)a和b是用户输入的两个常数,如果用户输入“乘法”这个文本,则计算a×b;如果用户输入“加法”这个文本,则计算a+b;如果输入的是其他的文本,则返回空向量。
a = input('请输入常数 a:');
b = input('请输入常数 b:');
% 下面的ss是一个文本,因此这里加上了第二个输入参数's'
ss = input('请输入操作(乘法、加法):', 's');
% 根据用户输入的操作执行相应的计算
if strcmp(ss, '乘法') % strcmp函数比较字符向量是否相同
result = a * b;
elseif strcmp(ss, '加法')
result = a + b;
else
result = [ ];
end
disp(result)
使用input函数输入数据时,有以下两点需要大家注意:
(1)第一种调用方法“x = input(提示用户输入的文本)”也能够用来保存用户输入的字符串或字符向量,但在输入时需要将字符向量用单引号引起来、字符串用双引号引起来。
以下两种输入字符向量的方式是等价的:
(2)使用input函数后,有时候你会发现MATLAB无论输入什么语句都没有反应,这很有可能是因为MATLAB在等待我们的输入,你可以观察MATLAB左下角的状态提示。如果MATLAB卡住了也可以在脚本编辑器或者命令行窗口按Ctrl+C快捷键来中断程序的运行。
编写MATLAB程序时,警告信息是一种有用的反馈机制,可以用来提示用户在程序执行过程中可能存在的问题或不规范的操作。MATLAB提供的warning函数用于显示警告信息。警告消息不会中断程序的执行,但它可以帮助用户和开发人员注意到潜在的问题,以便及时采取措施来解决。
首先介绍warning函数最常见的用法:warning off和warning on,它们分别用于关闭和打开MATLAB的警告信息。
例如运行下面这段代码时,MATLAB会弹出橙色的警告信息:
A = [3 6; 4 8];
inv(A) % 计算A的逆矩阵
如果我们不希望看到警告信息,那么可以在运行代码之前先运行warning off命令。
warning off
A = [3 6; 4 8];
inv(A) % 计算A的逆矩阵
warning函数还有另一种用法,可用来显示自定义的警告信息:warning(警告信息),这里的警告信息请使用字符向量(单引号引起来)的形式,如果使用字符串(双引号引起来)则在较低的MATLAB版本中运行会报错。
下面我们举个例子:a和b是用户输入的两个常数,计算a除以b的值,如果b等于0,则显示警告:分母不应为0。
warning on % 重新开启警告功能
a = input('请输入常数 a:');
b = input('请输入常数 b:');
if b == 0
warning('分母不应为0')
end
c = a/b
在 MATLAB 编程中,当程序遇到严重错误或不符合预期条件时,可以使用 error 函数显示自定义的报错消息,并终止程序的执行。
error函数的用法很简单:error(报错信息),这里的报错信息请使用字符向量(单引号引起来)的形式,如果使用字符串(双引号引起来)则在较低的MATLAB版本中运行会报错。
下面我们举个例子:a和b是用户输入的两个常数,计算a除以b的值,如果b等于0,则显示报错:分母不应为0。
a = input('请输入常数 a:');
b = input('请输入常数 b:');
if b == 0
error('分母不应为0')
end
c = a/b
和warning函数的结果对比,error函数生成的报错信息是红色的,且结果中没有出现c的值。这是因为一旦error函数被执行,程序会立即终止,后面的代码都不会被运行;而warning函数不会终止程序的执行,后面的代码仍会运行。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删