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

조회 수: 40 (최근 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!