一般的なバグの原因は、列ベクトルの要素をループすることです。列ベクトルは、1つの列を持つ行列のように扱われます。 (実際には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
扱いますa:b
、行ベクトルを完全には作成せず、各要素を一度に1つずつ作成するようにします。
これは構文を少し変更することで検出できます。
% Loops forever
for i = 1:1e50
end
% Crashes immediately
for i = [1:1e50]
end