本节说明 MATLAB 中重复执行代码段的 for 与 while 循环。二者均以 end 结束循环体,不使用花括号。次数已知或须依次遍历序列时多用 for;终止条件事先不确定时多用 while。在数组运算可替代逐元素循环时,宜优先向量化,与向量一节中的逐元素运算符一致。
for 循环
循环变量依次取 for 后表达式中的每个值:
for a = 10:20
fprintf('value of a: %d\n', a);
end上例中 a 从 10 取至 20,共 11 次迭代。常见三种序列形式如下:
| 写法 | 含义 |
|---|---|
for i = 1:10 | 从 1 到 10,步长 1 |
for i = 10:-2:1 | 从 10 到 1,步长 -2 |
for i = [24 18 17 23 28] | 依次取数组中的每个元素 |
第三种形式用于遍历数组元素:
scores = [78 92 85 63 70];
for s = scores
fprintf('成绩:%d\n', s);
endwhile 循环
while 在每次进入循环体前先判断条件;条件为真才执行循环体。循环体内须包含使条件最终为假的更新语句,否则可能形成死循环:
a = 10;
while a < 20
fprintf('value of a: %d\n', a);
a = a + 1;
endwhile 流程:先判断条件,为真则执行循环体,再返回条件处重新判断。
嵌套循环
循环体内可再写循环,适用于按行按列处理表格数据:
for i = 1:3
for j = 1:3
fprintf('%d×%d=%d ', i, j, i*j);
end
fprintf('\n');
end向量化与循环
许多对数组逐元素的操作可直接写为数组表达式,无需 for。例如将 1 至 1000 各自平方:
% 循环写法
y = zeros(1, 1000);
for i = 1:1000
y(i) = i^2;
end
% 向量化写法
x = 1:1000;
y2 = x.^2;结果相同;向量化写法通常更短,在大规模数据上往往更高效。逻辑须按元素分支且难以用逻辑索引表达时,再使用循环。
自查
- 用
for输出 1 至 10 的平方。 - 用
while计算 1 至 100 的整数和。 - 用嵌套循环打印 5×5 单位矩阵的 0/1 表示。
- 求 1 至 1000 的平方和,分别用循环与向量化实现并对比写法。
本节说明了 for 与 while 的语法、嵌套循环及向量化取舍。下一节介绍循环控制:break 与 continue。