第4章 MATLAB编程基础——4.3 MATLAB的控制流(2)

简介: 第4章 MATLAB编程基础——4.3 MATLAB的控制流(2)

4.3  MATLAB的控制流(2)


MATLAB平台上的控制流结构包括顺序结构、if-else-end分支结构、switch-case结构、try-catch结构、for循环结构和while循环结构,这6种结构的算法及使用与其他计算机编程语言十分类似,有编程基础的读者可以很快掌握。


4.3.4  try-catch结构

try-catch结构的具体句法形式如下:

try
    command1   % 命令组1总是首先被执行。若正确,则执行完成后结束此结构
catch
    command2   % 当命令组1执行发生错误时,执行命令组2
end

说明:

1)只有当MATLAB执行命令组1发生错误时,才执行命令组2try-catch结构只提供两个可供选择的命令组。

2)当执行command1发生错误时,可调用lasterr函数查询出错的原因。如果函数lasterr的运行结果为空字符串,则表示命令组1被成功执行了。

3)如果执行命令组2时又发生错误,则MATLAB将会终止该结构。


4-7try-catch结构的简单运用示例。

创建M文件并命名为ex4_7.m,利用M文件编辑器在M文件中输入:

Num = 6;
Mat = magic(4)
try
    Mat_Num = Mat(Num,:)    % 取Mat的第Num行元素
catch
    Mat_end = Mat(end,:)    % 若Mat没有Num行元素,则取Mat的最后一行元素
end
lasterr                     % 显示出错原因

运行M文件,得到如下结果:

Mat =
    16     2     3    13
     5    11    10     8
     9     7     6    12
     4    14    15     1
Mat_end =
     4    14    15     1
ans =
    '位置 1 处的索引超出数组边界(不能超出 4)。'


4.3.5  for循环结构


for循环结构是针对大型运算相当有效的运算方法。MATLAB中提供的循环结构有for循环结构和while循环结构两种。for循环重复执行一组语句预先给定的次数,匹配的end描述该语句。for循环结构的具体句法形式如下:

for x = array
    commands
end

说明:

1for指令后面的变量x称为循环变量,而forend之间的组命令commands被称为循环体。循环体被重复执行的次数是确定的,该次数由array数组的列数来确定。因此,在for循环过程中,循环变量x被依次赋值为数组array的各列,每次赋值,循环体都被执行一次。

2for循环内部语句末尾的分号隐藏重复的打印,若commands指令中包含变量,则循环后在命令行窗口中直接输入变量r来显示变量r经过循环后的最终结果。


4-8:利用for循环创建对称矩形示例。

创建M文件并命名为ex4_8.m,利用M文件编辑器在M文件中输入:

for i = 1 : 4
    for j = 1 : 4
        if i > (5 - j)
        else
            Mat(i,j) = i + j - 1;
        end
    end
end
Mat

运行M文件,得到如下结果:

Mat =
     1     2     3     4
     2     3     4     8
     3     4     6    12
     4    14    15     1


4-9:利用for循环求解1+2+…+100的和。

创建M文件并命名为ex4_9.m,利用M文件编辑器在M文件中输入:

sum = 0;
for i = 1 : 1 : 100
    sum = sum + i;
end
sum

运行M文件,得到如下结果:

sum =
        5050


4-10:利用for循环嵌套求解d0af53a96d0647ddfd4e11d3292fe741_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.pngf85fa737e2d34726a4cfc7d7db51b7d4_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.pngd259d8fa8381ae639938f0b841a4e9df_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

创建M文件并命名为ex4_10.m,利用M文件编辑器在M文件中输入:

x = [];
for n = 1:1:10
    for k = 1:1:4
        x(n,k) = sin((n * k * pi) / 360 );
    end
end
x

运行后可得到如下结果:

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

4.3.6  while循环结构


while循环在一个逻辑条件的控制下重复执行一组语句不定的次数,匹配的end描述该语句。while循环结构的具体句法形式如下:

while expression
    commands
end

说明:

1)在whileend之间的命令组被称为循环体。MATLAB在运行while循环之前,首先检测expression的值,若其逻辑值为真,则执行命令组;命令组第一次执行完毕后,继续检测expression的逻辑值,若其逻辑值仍为真,则循环执行命令组,直到表达式expression的逻辑值为假时,结束while循环。

2while循环和for循环的区别在于,while循环结构的循环体被执行的次数是不确定的,而for循环中循环体被执行的次数是确定的。

3)一般情况下,表达式的值都是标量值,但是在MATLAB中也同样运行表达式为数组的情况。当表达式为数组且数组所有元素的逻辑值均为真时,while循环才继续执行命令组。

4)如果while指令后的表达式为空数组,那么MATLAB默认表达式的值为假,直接结束循环。

5)在if-else-end分支结构中提到的有关变量比较的注意事项,对while循环也同样适用。


4-11while循环结构的简单运用示例。

Fibonacci数列的元素满足如下规则:ak+2=ak+ak+1 (k=1,2,…);而且a1=a2=1。现在要求出Fibonacci数列中第一个大于9999的元素。

创建M文件并命名为ex4_11.m,利用M文件编辑器在M文件中输入:

a(1) = 1;
a(2) = 1;
i = 2;
while a(i) < 10000
    a(i + 1) = a(i) + a(i - 1);
    i = i + 1;
end
[i a(i)]

运行M文件,得到结果:

ans =
          21       10946

结果表明,Fibonacci数列中第2110946是第一个大于9999的元素


4-12:利用while循环求解表达式671fe5575d57dcd062e3fd6fe278a285_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

创建M文件并命名为ex4_12.m,利用M文件编辑器在M文件中输入:

i = 1;
sum = 0;
while i <= 100
    sum = sum + i;
    i = i + 1;
end
sum

运行后可得到如下结果:

sum =
        5050


for循环和while循环的对比:

for循环与while循环的区别在于for循环的循环次数是一定的,由(end-start)/initval决定;而while循环的循环次数是不确定的。

因此,在用户无法确定循环次数,或者根本不需要知道循环次数,而只需要确定满足什么条件循环不停止的情况下,使用while循环比较合理。


相关文章
|
2月前
|
机器学习/深度学习 算法 数据库
基于CNN卷积网络的MNIST手写数字识别matlab仿真,CNN编程实现不使用matlab工具箱
基于CNN卷积网络的MNIST手写数字识别matlab仿真,CNN编程实现不使用matlab工具箱
|
8月前
|
存储 算法 索引
第4章 MATLAB编程基础——4.7 MATLAB程序的调试
第4章 MATLAB编程基础——4.7 MATLAB程序的调试
|
8月前
第4章 MATLAB编程基础——4.6 M文件中变量的检测与传递
第4章 MATLAB编程基础——4.6 M文件中变量的检测与传递
|
8月前
|
自然语言处理 算法
第4章 MATLAB编程基础——4.5 脚本与函数(2)
第4章 MATLAB编程基础——4.5 脚本与函数(2)
|
8月前
|
自然语言处理
第4章 MATLAB编程基础——4.5 脚本与函数(1)
第4章 MATLAB编程基础——4.5 脚本与函数(1)
|
8月前
第4章 MATLAB编程基础——4.4 控制程序流的其他常用指令
第4章 MATLAB编程基础——4.4 控制程序流的其他常用指令
|
8月前
|
机器学习/深度学习 算法
第4章 MATLAB编程基础——4.3 MATLAB的控制流(1)
第4章 MATLAB编程基础——4.3 MATLAB的控制流(1)
|
8月前
|
存储
第4章 MATLAB编程基础——4.2 变量
第4章 MATLAB编程基础——4.2 变量
|
8月前
第4章 MATLAB编程基础——4.1 M文件编辑器
第4章 MATLAB编程基础——4.1 M文件编辑器
|
9月前
|
存储 算法 调度
Matlab+Yalmip两阶段鲁棒优化通用编程指南
主要包含8大内容: ①.拿到一个复杂的两阶段鲁棒优化问题的分析步骤和方法。 ②.采用Yalmip工具箱中的uncertain函数和鲁棒优化模块求解两阶段鲁棒优化的子问题。 ③.Yalmip工具箱中的鲁棒优化模块和常规的求解思路有什么异同。 ④.使用KKT条件求解两阶段鲁棒优化的子问题。 ⑤.使用对偶变换求解两阶段鲁棒优化的子问题。 ⑥.采用Yalmip工具箱的内置函数,将线性约束写成紧凑矩阵形式的方法。 ⑦.矩阵形式的两阶段鲁棒优化问题,如何快速写出子问题内层优化的KKT条件。 ⑧.矩阵形式的两阶段鲁棒优化问题,如何快速写出子问题内层优化的对偶问题。

热门文章

最新文章