2016-12-09 10 views
0

私はmatlab関数で 'for'ループを作成しました。私がしたいのは、所定回数の繰り返し(最大ステップ)のループを実行することですが、最新の結果F(ステップ)と以前の結果F(ステップ-1)の差が指定されたしきい値を下回ると短いループを切断:MATLAB:ループ処理のためのブレーク

for steps = 1:maxsteps 

    (various calculations) 

if F(steps) - F(steps-1) < 0.001 
    Break 
end 
end 

F(手順)は、各ループ上のすべての反復で異なる2つの値の間の和を行うことにより、新しい列を「取得」N(= maxsteps)次元ベクトルです。 F(ステップ)= a + b。 maxstepsを想定し

は、8(または任意の整数)である私は、関数を実行するとき、私は次のエラーを取得する:

添字インデックスは、実際の正の整数または論理名のいずれかでなければなりません。

私がブレークなしで関数を実行すると、それは完全に機能しますが(もちろん、しきい値のオプションが失われています)。

EDIT [1]:この問題をもう一度見たので、この問題は最初の繰り返しにあると考えています。なぜなら、steps = 1のとき、F(1)-F(0)< 0.001となるので、私は不可能だと仮定します。私はその問題を解決するために何かを考える必要があります。

答えて

0

(あなたが指摘してきたように)問題は、最初のループは、この操作を実行しているということです。

F(1) - F(0) < 0.0001 

このゼロインデックスが無効であり、あなたのエラーの原因となります。

代わりに実行したいのは、ループ全体を少なくとも1回実行することです(ゼロインデックスを避けるため)。したがって、ifステートメントに条件付きを追加することができます。

if steps > 1 && (F(steps) - F(steps-1)) < 0.0001 

最初falseと評価された場合、論理及び(&&)の使用は、第2の条件を評価しないであろう。

+0

私はMATLAB(&&)でこれを行うことができるかどうかわかりませんでした。ありがとう! – Jespar