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

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

请先登录,再进行评论。

采纳的回答

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

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 基本的な設定 的更多信息

产品


版本

R2020a

Community Treasure Hunt

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

Start Hunting!