if文での複数条件が反映されない
33 views (last 30 days)
Show older comments
for i=1:n-1
if (0<=c_q(i,2)) && (c_q(i,2)<=360)
a_hr(i,1)=abs((timestep(i+1,2)-timestep(i,2)))*ah_r(i,2);
a_kr(i,1)=abs((timestep(i+1,2)-timestep(i,2)))*ak_r(i,2);
a_ar(i,1)=abs((timestep(i+1,2)-timestep(i,2)))*aa_r(i,2);
elseif c_q(i,2)>360
a_hr1(i,1)=abs((timestep(i+1,2)-timestep(i,2)))*ah_r(i,2);
a_kr1(i,1)=abs((timestep(i+1,2)-timestep(i,2)))*ak_r(i,2);
a_ar1(i,1)=abs((timestep(i+1,2)-timestep(i,2)))*aa_r(i,2);
else
a_hr2(i,1)=abs((timestep(i+1,2)-timestep(i,2)))*ah_r(i,2);
a_kr2(i,1)=abs((timestep(i+1,2)-timestep(i,2)))*ak_r(i,2);
a_ar2(i,1)=abs((timestep(i+1,2)-timestep(i,2)))*aa_r(i,2);
end
end
0<=c_q(i,2)<=360の条件でのみa_hr, a_kr, a_arを出力したいのですが,上記のコードだと条件外の場合も出力してしまいます.
なぜ条件外も出力されるのか原因が分からないので教えていただきたいです.
なお,c_qは負の値から徐々に正の値に変化する実数です.
2 Comments
Atsushi Ueno
on 15 Nov 2021
先のコメントは取り消します。
例えば三次元の行列に対しa(2,3)と二次元分のみ指定するとa(2,3,1)を指定するのと同じ事になります。
ベクトルを比較しているのではないかと疑いを持ってしまいましたが必ずスカラ同士を比較する事になります。
Accepted Answer
Atsushi Ueno
on 15 Nov 2021
乱数を入れて実行してみました。a_ar/a_ar1/a_ar2の比較のみ下記に記入します。
意図した通り、a_ar/a_ar1/a_ar2の各行についてどれか一つが選ばれて値が入っています。
下記においてゼロの箇所はまだ値が設定されていない部分です。もし既にa_ar等に値が入っていた場合、値が設定されないと以前に設定された値がそのまま残ってしまいます。その点認識は合っていますか?
a_ar = a_ar1 = a_ar2 =
0.0064 0 0
0.0674 0 0
0 0 0.0008
0 0 0.2439
0.0208 0 0
0 0 0.0524
0.238 0
0.5814 0
0.0072
3 Comments
Atsushi Ueno
on 17 Nov 2021
ありますね。一言でいうと「捕まえた”何か”を離してくれない現象」です。
MATLABではなくSimulinkの話ですが、伝家の宝刀bdclose allやclear allを使っても尚不可解な動作が解消せず、再起動で解消したが結局原因が良く分からなかった事はたまに(結構)あります。あとslprjフォルダの中身は一生解りそうにありません。プロジェクトの派生ファイルの使用 - MATLAB & Simulink - MathWorks 日本
More Answers (0)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!