if文での複数条件が反映されない

40 views (last 30 days)
taichi muto
taichi muto on 15 Nov 2021
Commented: taichi muto on 19 Nov 2021
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
Atsushi Ueno on 15 Nov 2021
c_qは二次元の行列ですか? 三次元以上の行列ではないですか?
Atsushi Ueno
Atsushi Ueno on 15 Nov 2021
先のコメントは取り消します。
例えば三次元の行列に対しa(2,3)と二次元分のみ指定するとa(2,3,1)を指定するのと同じ事になります。
ベクトルを比較しているのではないかと疑いを持ってしまいましたが必ずスカラ同士を比較する事になります。

Sign in to comment.

Accepted Answer

Atsushi Ueno
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
Atsushi Ueno on 17 Nov 2021
ありますね。一言でいうと「捕まえた”何か”を離してくれない現象」です。
MATLABではなくSimulinkの話ですが、伝家の宝刀bdclose allclear allを使っても尚不可解な動作が解消せず、再起動で解消したが結局原因が良く分からなかった事はたまに(結構)あります。あとslprjフォルダの中身は一生解りそうにありません。プロジェクトの派生ファイルの使用 - MATLAB & Simulink - MathWorks 日本
taichi muto
taichi muto on 19 Nov 2021
やはりそうなんですね...
そこはあまり深入りしない方がよさそうですね
大変助かりました。ありがとうございます!

Sign in to comment.

More Answers (0)

Products


Release

R2020a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!