店铺推广和网站优化一起做,电商网站设计思想,智能网站建设维护软件,东莞手机端建站模板MATLAB系列04#xff1a;循环结构 4. 循环结构4.1 while循环4.2 for循环4.2.1 运算的细节4.2.2 break语句和continue语句4.2.3 嵌套循环 4.3 逻辑数组和向量化4.3.1 逻辑数组的重要性4.3.2 用 if/else 结构和逻辑数组创建等式 4.4 总结 4. 循环结构
循环(loop)是一种 MATLAB … MATLAB系列04循环结构 4. 循环结构4.1 while循环4.2 for循环4.2.1 运算的细节4.2.2 break语句和continue语句4.2.3 嵌套循环 4.3 逻辑数组和向量化4.3.1 逻辑数组的重要性4.3.2 用 if/else 结构和逻辑数组创建等式 4.4 总结 4. 循环结构
循环(loop)是一种 MATLAB 结构它允许我们多次执行一系列的语句。循环结构有两种基本形式:while 循环和 for 循环。while的循环次数是不能确定的for的循环次数是确定的。
4.1 while循环
while循环语句的基本形式
while expression.........
end如果 expression 的值非零(true)程序将执行代码块然后返回到 while 语句执行。如果 expression 的值仍然非零那么程序将会再次执行代码。直到 expression 的值变为 0这个重复过程结束。
4.2 for循环
for 循环结构是另一种循环结构它以指定的数目重复地执行特定的语句块。 For 循环的形式如下
for index exprStatement 1...Statement n
end其中 index 是循环变量就是我们所熟知的循环次数 exp 是循环控制表达式。变量 index 读取的是数组 expr 的行数然后程序执行循环体loopbody所以 expr 有多少列循环体就循环多少次。 expr 经常用捷径表达式的方式即 first:incr:last。
4.2.1 运算的细节 不是必须缩进 for 循环的循环体。即使所有语句都左对齐 MATLAB 程序也会识别出这个循环。但缩进循环体能增强代码的可读性。 在 for 循环中我们不能随意修改循环变量。 循环变量常被用作计数器。 在循环前最好预分配数组大小。因为在循环中每拓展一次数组都要经历以下步骤第一步创建一个新数组。 第二步把旧数组的元素复制到新数组当中。第三步把31 扩展的元素写入新数组。 第四步 删除旧数组。 比较耗费时间。 用 for 循环和向量计算是非常常见的。在 MATLAB 中用向量算法代替循环的算法的过程称之为向量化(vectorization)。向量化能够改进许多的 MATLAB 程序。示例 for循环 for ii 1:100square(ii) ii ^2;square_root(ii) ii ^ (1/2);cube_root(ii) ii ^ (1/3);
end向量计算 ii 1:100;
square ii .^2;4.2.2 break语句和continue语句
有两个附加语句可以控制 while 和 for 循环break 和 continue 语句。 break 语句可以中止循环的执行和跳到 end 后面的第一句执行而 continue 只中止本次循环然后返回循环的顶部。
4.2.3 嵌套循环
一个循环完全出现在另一个循环当中这种情况经常发生。如果一个循环完全出现在另一个循环当中我们称这两个循环为带嵌套的循环。
4.3 逻辑数组和向量化
除了字符型和数字型的数据类型还有第三种数据类型逻辑型。示例
a [1 2 3; 4 5 6; 7 8 9];
b a 5
whosb 3×3 logical 数组0 0 00 0 11 1 1Name Size Bytes Class Attributesa 3x3 72 double b 3x3 9 logical 我们还可以用 logical 函数给一个数组加上一个逻辑属性。如 clogical(a)c 3×3 logical 数组1 1 11 1 11 1 1一个数组的逻辑属性可以通过任何的数学运算去除。 cc0c 1 1 11 1 11 1 1 whos cName Size Bytes Class Attributesc 3x3 72 double 4.3.1 逻辑数组的重要性
逻辑数组有一个重要的属性——它在算术运算中能提供一个屏蔽(mask)。屏蔽(mask)是指一个数组它从另一个数组选择所需的元素参与运算。指定的运算只在选择的元素上执行而不执行余下的元素。 例如假设数组 a 和 b 的定义如上节所示。那么语句 a(b)sqrt(a(b))会计算 a 中相应的元素的平方根相应的元素是指与 b 数组中的非零元素相对应的数组 a 中的元素。其他元素保持不变。 aa 1 2 34 5 67 8 9 bb 3×3 logical 数组0 0 00 0 11 1 1 a(b)sqrt(a(b))a 1.0000 2.0000 3.00004.0000 5.0000 2.44952.6458 2.8284 3.00004.3.2 用 if/else 结构和逻辑数组创建等式
逻辑数组经常被用来替代 for 循环中的 if/else 结构。例如假设我们要计算一个二维数组中所有的大于 5 的元素的平方根然后其余的数的平方。利用循环和选择结构的代码如下:
for ii 1:size(a,1)for jj 1:size(a,2)if a(ii,jj) 5a(ii,jj) sqrt(a(ii,jj));elsea(ii,jj) a(ii,jj)^2;endend
end用逻辑数组运算的代码如下:
b a 5;
a(b) sqrt(a(b));
a(~b) a(~b) .^2;4.4 总结