MATLAB循环用来把同一段代码重复执行。次数已知时用 for,只知道继续条件时用 while,两者都以 end 收尾,没有花括号。
for 循环
知道要转几圈时用 for。循环变量会依次取后面给出的每个值:
for a = 10:20
fprintf('value of a: %d
', a);
enda 从 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);
endwhile 循环
不知道次数、只知道什么条件下还要继续时,用 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 的平方和,分别用循环和向量化各写一遍,对比写法。