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

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

0 votes

乱数を入れて実行してみました。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

taichi muto
taichi muto on 17 Nov 2021
ご回答していただきありがとうございます。
返信が遅れてしまい、申し訳ありません。
検証していただきありがとうございます。
スカラ同士を比較しています。
また、値が設定されないと以前に設定された値が残ることは認識できております。
MATLABを再起動して実行したら希望条件での値のみが出力されました。
本来の質問の趣旨とは異なるのですが、MATLABでは再起動したらよくなるということは多々あるのかご存じでしょうか?また、そのようなことを経験したことはありますか?
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)

Categories

Find more on アプリの作成 in Help Center and File Exchange

Products

Release

R2020a

Community Treasure Hunt

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

Start Hunting!