どうも,いつもお世話になっているおこめです. octaveを使ってランダムウォーク(2次元)をシュミュレーションして累積分布のプログラムを考えています.軌道を描き,距離を求めるところまでは成功したのですが,累積分布を求めるためのカウンタを作ることができません.どなたか教えていただけませんか?
footlength = 1.0; x = 0; y = 0; n_max = 200; t_max = 1000; for j = 1:n_max; for i = 1:t_max; angle(i) = 2*pi*rand; x(i+1) = x(i) + footlength*cos(angle(i)); y(i+1) = y(i) + footlength*sin(angle(i)); endfor R(j) = sqrt(x(t_max)^2 + y(t_max)^2); endfor R
やっとできました.失礼します.
footlength = 1.0; x = 0; y = 0; R = 0; X = 0; n_max = 200; t_max = 1000; bin_number = 300; R_max = t_max*footlength; delta = R_max/bin_number; for j = 1:n_max; for i = 1:t_max; angle(i) = 2*pi*rand; x(i+1) = x(i) + footlength*cos(angle(i)); y(i+1) = y(i) + footlength*sin(angle(i)); endfor R = sqrt(x(t_max)^2 + y(t_max)^2); c = 1 + round(R/delta); for k = 1: bin_number; endfor count(k) = 0; count(c) = count(c) + 1; endfor for l = 1:(bin_number - 1); X(l+1) = X(l) + delta; endfor plot(X,count) pause
うまいこと動くようになったのですが,上のプログラムの次の部分 >for k = 1: bin_number; >endfor >count(k) = 0; >count(c) = count(c) + 1; がどうしてこれでうまくいくのか良く分かりません.for kからendforの間でなく外にcount(k)を置くと,なぜかうまいことプログラムが動いてくれるんです.謎です.
さっそくの返信ありがとうございます. >for k = 1: bin_number; >endfor >の二行を消すとどうなります?
「定義されていないkという変数があります.」のようなエラーメッセージが出てきますね.なぜか分からないですけども,うえのプログラムの順番で書くとうまいことカウンタがRの値に応じてdeltaきざみのどれかのXに対応したcountの列ベクトル成分をひとつ増やす作業をしてくれます.
> 「定義されていないkという変数があります.」 > のようなエラーメッセージが出てきますね.
あ,そりゃそうか….
for k = 1: bin_number; endfor count(k) = 0;
の三行は無くても良いっぽいですね.