2017-08-03 10 views
-2

forループに条件を追加したいとします。forループの論理AND

for(i=1; (i<100)&&(something>0.001) ; i++) 
{ 
    //do something 
} 

これをMATLABでどのように実装できますか?

以下

が動作していない: max_sim_valuethresholdの一つは長さ pI_present_yのベクトルである場合

for (y = 1:pI_present_y) && (max_sim_value > threshold) 
    % do something 
end 

答えて

2

ループでは、反復回数とループ変数がその反復で持つ値は、最初に実行されるとすぐに選択されます。
すべての反復で条件を確認したいので、ループ内にif条件を導入することなく、forループを使用することはできません。これは何ですかalready suggestedによってsoutyです。

ただし、条件が満たされていない場合はbreakを使用する方が良いでしょう。このようにして、Cコードの真のレプリカになります。そうでなければ、ループはypI_present_yに等しくなるまで実行を続けます。結果は同じになりますが、不要な反復があり、ループ変数の値はループの最後で異なります。すなわち

for y = 1:pI_present_y-1 %Subtracting 1 because you have i<100 in the C code, not i<=100 
    if max_sim_value <= threshold 
     break; 
    end 
    %do something 
end 

あなたがループ文でその条件を使用したい場合は、それはwhileループでのみ可能です。

y=1; 
while(y<pI_present_y && max_sim_value>threshold) 
    % do something 
    y=y+1; 
end 
2

論理条件は、if

for (y = 1:pI_present_y) 
    if (max_sim_value > threshold) 
     % do something 
    end 
end 

インデックスを発現していることをyでステートメント、つまりmax_sim_value(y)またはthreshold(y)です。

関連する問題