对于循环

迭代列向量

一个常见的错误来源是尝试遍历列向量的元素。列向量被视为具有一列的矩阵。 (在 Matlab 中实际上没有区别。)for 循环运行一次,循环变量设置为列。

% Prints once: [3, 1]
my_vector = [1; 2; 3];
for i = my_vector
    display(size(i))
end

改变迭代变量

更改迭代变量会更改其当前迭代的值,但在后续迭代中不会影响其值。

% Prints 1, 2, 3, 4, 5
for i = 1:5
    display(i)
    i = 5; % Fail at trying to terminate the loop
end

右手边的 a:b 特殊表现

基本示例将 1:n 视为创建行向量然后迭代它的正常实例。出于性能原因,Matlab 实际上通过不完全创建行向量来处理任何 a:ba:c:b,而是一次创建一个元素。

这可以通过稍微改变语法来检测。

% Loops forever
for i = 1:1e50
end
% Crashes immediately
for i = [1:1e50]
end