乱数, 1次元ランダムウォーク

目次 解答例(ないかも)

課題14_01 (ta111) 準備

後期の課題の準備です.

  1. ホームディレクトリの下に, サブディレクトリ cs2を作りましょう. さらにその下にサブディレクトリ rw を作りましょう. 名前は自分の好みで変えてもよい. 以後の作業はこの下で行いましょう.
  2. エディタとしてはemacs を使うことを非常に非常に強く奨めます. ホームディレクトリに置かれている 設定ファイル ~/.emacs (ピリオドから始まります) を, このリンクの内容で置き換えましょう (右クリックでリンクに名前をつけて保存を選ぶとよい. すでに自分で書き換えている部分を捨てたくない人は樋口にご相談下さい). 保存したら emacs を再起動します. 拡張子が .c .h のファイルを編集しているときには, control-c control-c でコンパイル, control-x `(バッククォート) または control-x x でエラーに飛べます.
  3. サブディレクトリ ~/cs2/rw に, サンプル群を保存しましょう.

課題14_02 (ta112) 乱数と1次元ランダムウォーク

C のプログラミングを思い出しましょう.

サブディレクトリ ~/cs2/rwに cd し,

s1609h017% make randomtest
でコンパイルが実行され実行ファイル randomtest ができます. これは,
s1609h017% ./randomtest -n 102 -s 3098
とすると, 3098 を seed として, 102 回乱数を発生し, +1, -1 をランダムに表示するものです.

このプログラムを参考に, サンプルrw1d1.cを書き換えて, ランダムウォークの途中経過を表示するプログラムをつくろう.
s1609h017% ./rw1d1 -n 102 -s 3098
とすると, 3098 を seed として, 長さ 102 の1次元ランダムウォークを行い,
0 0
1 -1
2 -2
3 -1
4 0
5 -1
..
のように表示する. ただしx -> yとジャンプする遷移確率は,

W(y|x)=

0.5(y=x+1,右に1進む),
0.5(y=x-1,左に1進む),
0 (それ以外)

課題14_03 (ta113) 1次元ランダムウォーク

上でつくったプログラムを参考に, サンプルrw1d2.cを書き換えて, 1次元ランダムウォークの最終到達地点の座標(だけ)と, その平均と分散を表示する プログラムを作ろう.

s1609h017% ./rw1d2 -n 102 -s 3098 -N 5
とすると, 3098 を seed として, 長さ 102 の, 5回行い,
0 2 
1 -10
2 -8
3 14
4 8

回数 5
平均 1.2   #(= (2 + -10 + -8 + 14 + 8)/5)
分散 84.4      
のように表示する. 遷移確率は14_02と同じとする.

課題14_04 (ta115) 1次元ランダムウォーク

課題 14_03rw1d2.crw1d3.c にコピーして書き換えて, 次の遷移確率W(y|x)にしたがって x -> yとジャンプするランダムウォークに つくり直そう. ただし,

W(y|x)=

0.4(y=x-1),
0.2(y=x)
0.2 (y=x+1)
0.2 (y=x+2)
0 (それ以外)


Copyright © 2002 Saburo Higuchi. All rights reserved.
Saburo HIGUCHI, hig mail address
最後の更新は次の時刻以降 2002/09/20 Fri 16:12