第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点。できたところだけでも 必ず提出すること!
© Copyright 2024 Paperzz