while文の条件がfalseになってもループが続いてしまいます
14 ビュー (過去 30 日間)
古いコメントを表示
while文の条件がfalseになってもループが続いてしまい,困っています.
添付したプログラムの22行目のwhile文において,
xの値を見てみると,while文の条件(D<=0)がfalseになっても,同じwhile文内をループしているようです.
何が原因なのでしょうか?
0 件のコメント
回答 (1 件)
Shunichi Kusano
2020 年 12 月 10 日
コード拝見しましたが、2点ほど気になる点があります。
1.rLがベクトルなので、xもベクトルになってしまう。結果としてDもベクトルになってしまう。
D<=0という条件でのwhileなので、おそらくDは単一の数字(スカラ)を想定されているのではないかと思います。ですが現在の仕様だと初期値ではスカラなのにwhile文が始まったらベクトルに書き換わっています。これは想定通りでしょうか?
2.whie文の中をみると常に同じ計算が繰り返されるだけで値が更新されない
whileループの中を見てみますと、演算をしている部分は次の3行です。
x=p;
x=x+rL; % x = p + rL
D=abs(p)-abs(x);
これが繰り返されることになりますので、毎度同じ結果が出ることになります。おそらくpがループの度に更新されるべきだと思うのですが、いかがでしょうか。
2 件のコメント
Shunichi Kusano
2020 年 12 月 16 日
値をプロットするには2つやり方があります。
プロットだけが欲しい場合、
plot(x1,y1); % x1,y1は適当な値
hold on; % 描画結果を残す
plot(x2,y2); % 描画(hold onしているので結果として重ね書きとなる)
という形で、一度プロットした結果はhold onで保持できるので、whileの中でhold on とplotをセットで使うことで、最終的には全データのプロットを見ることができます。
データも欲しい場合(こちらが推奨)、
whileの中で、xを保存しておく用の配列を用意しておいて、それに随時xの値を格納していきます。
xdata = zeros(想定するxの全データ数(不明なら適当に大きい数にしておいて、計算後不要部分をカットでもいいです));
i = 1;
while ...
x = ほにゃらら; % xの値を計算
xdata(i) = x; % xdataにxを保存
i = i+1; % iを更新
end
参考
カテゴリ
Help Center および File Exchange で Annotations についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!