Skip to content

MATLAB - For 循环

for 循环是一种控制流语句,允许代码重复执行。它非常适合您需要迭代特定次数的情况,例如,遍历数组的元素。

MATLAB 中 for 循环的基本语法是:

for index = values
% 每次迭代中要执行的代码
% ...
end

values 表达式可以有多种形式:

格式描述
start:end在每次迭代中,index 变量从 start 递增到 end,步长为 1。
start:step:end在每次迭代中,index 变量按 step 的值递增。step 可以是负数,表示倒计数。
array在每次迭代中,将 array 的连续列分配给 index。对于行向量或列向量,它将向量的每个元素分配给 index。

此循环从 1 迭代到 5,并在每一步中打印循环变量 k 的值。

for k = 1:5
fprintf('Iteration number: %d\n', k);
end

当您运行此代码时,它会显示以下结果:

Iteration number: 1
Iteration number: 2
Iteration number: 3
Iteration number: 4
Iteration number: 5

此循环从 10 倒计数到 0,步长为 -2。

for countdown = 10:-2:0
disp(countdown)
end

当您运行文件时,它会显示:

10
8
6
4
2
0

您可以直接遍历向量的元素。

data_points = [1.2, 5.5, 2.8, 4.1];
for val = data_points
fprintf('Processing value: %.1f\n', val);
end

输出将是:

Processing value: 1.2
Processing value: 5.5
Processing value: 2.8
Processing value: 4.1

for 循环的一个常见用途是构建数组或矩阵。然而,在循环内部重复调整数组大小(例如,通过追加元素)在 MATLAB 中非常慢。最佳实践是在循环开始之前为数组**预分配(pre-allocate)**内存。

tic; % 启动计时器
results = []; % 初始化一个空数组
for i = 1:100000
results(i) = i^2; % 数组在每次迭代中增长
end
toc; % 停止计时器
% 耗时明显更长。
tic; % 启动计时器
num_elements = 100000;
results = zeros(1, num_elements); % 预分配内存
for i = 1:num_elements
results(i) = i^2; % 填充预分配的值
end
toc; % 停止计时器
% 耗时短得多。

虽然 for 循环是必要的,但 MATLAB 中的许多任务可以使用**向量化(vectorization)**更高效地执行。这意味着一次对整个数组应用操作,而不是逐个元素操作。如果您可以将计算表达为向量化操作,它几乎总是比循环更快。

% 目标:对向量中的每个元素进行平方
% 使用 for 循环(较慢)
x = 1:1000;
y = zeros(size(x));
for i = 1:length(x)
y(i) = x(i)^2;
end
% 使用向量化(更快更简洁)
x = 1:1000;
y_vectorized = x.^2; % .^ 运算符执行元素级幂运算
% y 和 y_vectorized 都包含相同的结果。

在编写 for 循环之前,始终寻找向量化解决方案。循环最好保留给那些本质上是顺序的且无法向量化的过程。