確率運動

第5回
計算機実験1
自然情報学講座 瀬戸 繭美
[email protected]
前回まで
数値積分
• リーマン和!
• 台形則!
• シンプソン則!
• モンテカルロ積分
今回
モンテカルロ積分の続きと酔歩プログラムの作成
課題 10
モンテカルロ法により以下の積分の近似値を求めよ。
また真の値と定量的に比較せよ。
(1)
x2 +y 2 1
1
(2)
1
3+
⇥
1
1
x2
z2
2
y 2 dxdy =
3
1
x2 +y 2 +z 2 1
dxdydz
2
z2 dz =
半径1の円をz軸の周りで半径3で
回転させてできるトーラスの体積
( x2 +y2 3)2 +z2 1
dxdydz
ポイント
メルセンヌ・ツイスタで[0, 1]の実数の乱数を発生
させる関数genrand_real1()を用いて [-1, 1]の範囲で
実数の乱数をどうやって発生させるか?
酔歩問題 (ランダム・ウォーク)
ある対象が一定の確率法則に従い
ランダムに運動し、その位置や値
を決定する過程
• コイン投げ、サイコロの目の出方
• 分子のブラウン運動
• 株価
確率変数と確率分布
確率変数:!
x1, x2, ..., xn の個の値をとる変数Xに対してX = xi になる
確率pi が与えられているとき, Xを確率変数という。
確率分布:!
確率変数Xとそれに対応する確率P(X = xi)との対応関係。
例) コイン投げの場合
X: コインの表が出る回数
P: コインの表がi 回出る確率
コイン投げの確率分布
例) コイン投げの場合, 続き
全ての投数nのうち表が出る確率がpで、裏が出る確率が
q = 1 - pであるとする。この時表がi回分子出る確率は、
二項分布
i (n i)
P(X = i) = nCi p q
n!
i (n
=
pq
i!(n i)!
i)
pi
0.30
n = 10
0.25
n = 15
0.20
pとqが等確率ならば
n!
1
P(X = i) =
i!(n i)! 2
0.15
n
0.10
0.05
0.00
0
2
4
6
8
10
12
14
i
課題 11
t
ある分子が進行方向に時間ス
テップ毎に前進する際、1/2の
確率で右に、1/2の確率で左に
進むものとする。10000個の分
…
子に対して前進を100回繰り返
2
1
0
した後のxを求め、xの頻度分
布と理論値を重ね合わせた図
を作成せよ。
… -2 -1 0 1 2 …
x
1次元ランダム・ウォークの確率分布
全ての歩数nのうち右に移動する回数をn+、
左に移動する回数をn - とすると、
n = n+ + n , x = n+
n
n+x
n x
n+ =
, n =
2
2
全歩数nにおいて分子の位置xが従う確率分布関数は、
n+x
2
1
P(X = x) = nC n+x
2
2
n!
=
n+x
n x
2 ! 2 !
1
2
1
2
n x
2
n
Mathematicaでの頻度分布の描き方
SetDirectory[“データのあるディレクトリ名”] 頻度
data = ReadList[“data”,Real] (*注:データは一行に書き出しておくこと*) !
(*10000であることを確認*) Length[data] !
Histo = Histogram[data]
10
8
6
4
2
0
!40
50回シミュレーションした時の
頻度分布
!20
0
x
20
40
Mathematicaでの二項分布の理論値の描き方
(*確率分布関数の定義*) prob[x_, n_] := n!/((n+x)/2)!/((n-­‐x)/2)!/2^n !
(*xiが -­‐50 から 50 までの理論値を計算し, xiとpiのセットを作る*) n = 100 numHead = Table[x,{x,-­‐50,50}] probSeq = Map[prob[#,n]&,numHead] points = Transpose[{numHead,10000probSeq}] !
Binom = ListPlot[points,PlotJoined-­‐>True] !
Show[Histo, Binom]
10
8
頻度!
期待値
50回シミュレーションした時の
6
4
頻度分布と理論値を重ねたもの
2
0
!40
!20
0
x
20
40
y
ある分子が進行方向に時間ステッ
プ毎に移動する際、前(y++)、後
…
課題 12
ろ (y--)、右 (x++)、左(x--)にそれ
2
1
0
-1
-2
ぞれ1/4の確率で移動するものと
する。10000個の分子に対して移
動を10, 50, 100回ずつ繰り返した
後のx,yを求め、それぞれの結果
…
についてxy平面上に分子の位置を
プロットせよ。
… -2 -1 0 1 2 …
x
Mathematicaでのxy平面上プロットの描き方
SetDirectory[“データのあるディレクトリ名”] data = ReadList[“data”,{Real,Real}] (*注: データは一行につき一回のシミュ
レーション後の x y を書き出しておくこと*) !
(*シミュレーションの回数が表示されることを確認*) n=Length[data] !
ListoPlot[data,PlotRange-­‐>{{-­‐50,50},{-­‐50,50}},AspectRatio-­‐>1]
レポート提出
11月28日 (金) 17:00 厳守
• 締め切りに遅れたものは受け取らない!
• 数値微分、数値積分、並びに作成した全プロ
グラムを全てホチキスでまとめ、提出!
• 提出しない場合は0点。できたところだけでも
必ず提出すること!