while文の条件が​falseになっても​ループが続いてしまい​ます

16 ビュー (過去 30 日間)
Yuriko
Yuriko 2020 年 12 月 10 日
コメント済み: Shunichi Kusano 2020 年 12 月 16 日
while文の条件がfalseになってもループが続いてしまい,困っています.
添付したプログラムの22行目のwhile文において,
xの値を見てみると,while文の条件(D<=0)がfalseになっても,同じwhile文内をループしているようです.
何が原因なのでしょうか?

回答 (1 件)

Shunichi Kusano
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 件のコメント
Yuriko
Yuriko 2020 年 12 月 12 日
回答いただきありがとうございます.
更新したプログラムを添付いたします.
1.乱数(rL,rS)がスカラになるように変更したところ,うまく計算できたようです.
2.更新する値について間違っていました.ご指摘の通り変更したところ,うまくいきました.
ここで,もう一つ問題があり,最終的にxの値が変化するごとにプロットして挙動を可視化したいのですが,どのようにしたら良いのでしょうか?
添付のプログラムですと,xの最終値だけプロットされたグラフが出てしまいます.
Shunichi Kusano
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 ExchangeAnnotations についてさらに検索

タグ

製品


リリース

R2020a

Community Treasure Hunt

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

Start Hunting!