MATLAB循环用来把同一段代码重复执行。次数已知时用 for,只知道继续条件时用 while,两者都以 end 收尾,没有花括号。

for 循环

知道要转几圈时用 for。循环变量会依次取后面给出的每个值:

MATLAB for 循环示例运行
for a = 10:20
    fprintf('value of a: %d
', a);
end

a 从 10 取到 20,一共打印 11 行。for 后面常见三种写法:

写法含义
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
', s);
end

while 循环

不知道次数、只知道什么条件下还要继续时,用 while。它先判断条件,为真才进循环体:

a = 10;
while a < 20
    fprintf('value of a: %d
', a);
    a = a + 1;   % 一定要在循环里更新变量
end

这里的 a = a + 1 不能省。若不更新,a 一直是 10,条件永远为真,就会死循环。

开始条件?循环体循环后代码结束

while 循环流程:先判断条件,为真进入循环体,跑完回到条件再判断

嵌套循环

循环里再套循环,适合处理表格式数据。下面打印一小段乘法表:

for i = 1:3
    for j = 1:3
        fprintf('%d×%d=%d  ', i, j, i*j);
    end
    fprintf('
');
end

外层走一行,内层把这一行的列走完,再换行。

能向量化时少写循环

MATLAB 里很多运算可以直接对数组做,不必逐个元素 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 的和。
  • 写嵌套循环,打印用 0/1 表示的 5×5 单位矩阵。
  • 求 1 到 1000 的平方和,分别用循环和向量化各写一遍,对比写法。