累積分布(octave)

累積分布(octave)

おこめ さんの書込 (2005/01/23(Sun) 09:04)

どうも,いつもお世話になっているおこめです. octaveを使ってランダムウォーク(2次元)をシュミュレーションして累積分布のプログラムを考えています.軌道を描き,距離を求めるところまでは成功したのですが,累積分布を求めるためのカウンタを作ることができません.どなたか教えていただけませんか?

Re: 累積分布(octave)

おこめ さんのレス (2005/01/23(Sun) 09:09)

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

Re: 累積分布(octave)

おこめ さんのレス (2005/01/24(Mon) 23:25)

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

Re: 累積分布(octave)

おこめ さんのレス (2005/01/24(Mon) 23:36)

うまいこと動くようになったのですが,上のプログラムの次の部分 >for k = 1: bin_number; >endfor >count(k) = 0; >count(c) = count(c) + 1; がどうしてこれでうまくいくのか良く分かりません.for kからendforの間でなく外にcount(k)を置くと,なぜかうまいことプログラムが動いてくれるんです.謎です.

Re: 累積分布(octave)

崎間 さんのレス (2005/01/25(Tue) 00:00)

for k = 1: bin_number; endfor

の二行を消すとどうなります?

Re: 累積分布(octave)

おこめ さんのレス (2005/01/25(Tue) 07:09)

さっそくの返信ありがとうございます. >for k = 1: bin_number; >endfor >の二行を消すとどうなります?

「定義されていないkという変数があります.」のようなエラーメッセージが出てきますね.なぜか分からないですけども,うえのプログラムの順番で書くとうまいことカウンタがRの値に応じてdeltaきざみのどれかのXに対応したcountの列ベクトル成分をひとつ増やす作業をしてくれます.

Re: 累積分布(octave)

崎間 さんのレス (2005/01/25(Tue) 09:16)

> 「定義されていないkという変数があります.」 > のようなエラーメッセージが出てきますね.

あ,そりゃそうか….

for k = 1: bin_number; endfor count(k) = 0;

の三行は無くても良いっぽいですね.

Re: 累積分布(octave)

おこめ さんのレス (2005/01/25(Tue) 09:28)

どうやら上の不要と思われた3行で一気にbin_number次元の列ベクトルを生成してくれるようです.