本节说明 MATLAB 中重复执行代码段的 for 与 while 循环。二者均以 end 结束循环体,不使用花括号。次数已知或须依次遍历序列时多用 for;终止条件事先不确定时多用 while。在数组运算可替代逐元素循环时,宜优先向量化,与向量一节中的逐元素运算符一致。

for 循环

循环变量依次取 for 后表达式中的每个值:

MATLAB 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);
end

while 循环

while 在每次进入循环体前先判断条件;条件为真才执行循环体。循环体内须包含使条件最终为假的更新语句,否则可能形成死循环:

a = 10;
while a < 20
    fprintf('value of a: %d\n', a);
    a = a + 1;
end
开始条件?真循环体假循环后代码结束

while 流程:先判断条件,为真则执行循环体,再返回条件处重新判断。

嵌套循环

循环体内可再写循环,适用于按行按列处理表格数据:

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。