对于循环
迭代列向量
一个常见的错误来源是尝试遍历列向量的元素。列向量被视为具有一列的矩阵。 (在 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:b
或 a:c:b
,而是一次创建一个元素。
这可以通过稍微改变语法来检测。
% Loops forever
for i = 1:1e50
end
% Crashes immediately
for i = [1:1e50]
end