h25 奈良女 計算機実験1 第4回seto/keisanki1/h25_kei...計算機実験1...

23
計算機実験1 自然情報学講座 瀬戸 繭美 [email protected] H25 奈良女 計算機実験1 4

Upload: others

Post on 07-Mar-2020

10 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: H25 奈良女 計算機実験1 第4回seto/keisanki1/H25_kei...計算機実験1 自然情報学講座 瀬戸 繭美 seto@ics.nara-wu.ac.jp H25 奈良女 計算機実験1 第4回 H25

計算機実験1

自然情報学講座 瀬戸 繭美[email protected]

H25 奈良女 計算機実験1 第4回

Page 2: H25 奈良女 計算機実験1 第4回seto/keisanki1/H25_kei...計算機実験1 自然情報学講座 瀬戸 繭美 seto@ics.nara-wu.ac.jp H25 奈良女 計算機実験1 第4回 H25

H25 奈良女 計算機実験1 第4回

前回まで

数値積分 • リーマン和• 台形則• シンプソン則

今回

モンテカルロ積分と酔歩プログラムの作成

Page 3: H25 奈良女 計算機実験1 第4回seto/keisanki1/H25_kei...計算機実験1 自然情報学講座 瀬戸 繭美 seto@ics.nara-wu.ac.jp H25 奈良女 計算機実験1 第4回 H25

H25 奈良女 計算機実験1 第4回

複雑な積分境界多次元の積分(重積分)になると積分範囲の解析的な

表現が簡単に書けない場合がある

!4

!2

0

2

4 !4

!2

0

2

4

!1.0!0.50.00.51.0

!3 !2 !1 0 1 2 3

!3

!2

!1

0

1

2

3

Page 4: H25 奈良女 計算機実験1 第4回seto/keisanki1/H25_kei...計算機実験1 自然情報学講座 瀬戸 繭美 seto@ics.nara-wu.ac.jp H25 奈良女 計算機実験1 第4回 H25

H25 奈良女 計算機実験1 第4回

モンテカルロ積分法積分範囲内にランダムな点(乱数)をうち、点の数を数えることで面積を求める方法

数学的問題の解法に疑似乱数を用いる方法をモンテカルロ法と呼ぶ

Page 5: H25 奈良女 計算機実験1 第4回seto/keisanki1/H25_kei...計算機実験1 自然情報学講座 瀬戸 繭美 seto@ics.nara-wu.ac.jp H25 奈良女 計算機実験1 第4回 H25

H25 奈良女 計算機実験1 第4回

一様乱数

Prob[x < X < x + dx] =�

1b�adx a < x < b

0 Otherwise

確率密度関数はステップ関数

点はランダムに均等に打たれる必要がある一様乱数区間[a,b]で全ての実数が同じ確率で出現する

1b � a

ba

乱数が正規分布に従う場合

乱数が一様分布に従う場合

Page 6: H25 奈良女 計算機実験1 第4回seto/keisanki1/H25_kei...計算機実験1 自然情報学講座 瀬戸 繭美 seto@ics.nara-wu.ac.jp H25 奈良女 計算機実験1 第4回 H25

H25 奈良女 計算機実験1 第4回

疑似乱数の生成方法

例. 線形合同法

Xi+1 = (A�Xi + B) mod M

適当な整数 A, B, Mを用いて、任意の初期値 X0 を乱数の種 seed として 逐次乱数Xi を求める方法

M: 法   M > 0 A: 乗数  0 < A < M B: 増分  0 < B < MX0: 初期値 0 ≤ X0 < M

• 0からM-1の範囲で整数の乱数を発生させる• 最大周期はM, 1周期中に整数は発生しない• BとMは互いに素である必要がある

Page 7: H25 奈良女 計算機実験1 第4回seto/keisanki1/H25_kei...計算機実験1 自然情報学講座 瀬戸 繭美 seto@ics.nara-wu.ac.jp H25 奈良女 計算機実験1 第4回 H25

H25 奈良女 計算機実験1 第4回

#define IA! 3877   // A#define IB! 29573 // B#define IM! 139968 // M

int main (int argc, const char * argv[]) { ! int i, randomInt;! double randomDouble;

! randomInt = 10;! !! for(i=0; i<1000; i++){! ! randomInt = (randomInt*IA + IB) % IM;! ! randomDouble = randomInt/(IM + 1.0);! }!! return 0;}

線形合同法のアルゴリズム

Page 8: H25 奈良女 計算機実験1 第4回seto/keisanki1/H25_kei...計算機実験1 自然情報学講座 瀬戸 繭美 seto@ics.nara-wu.ac.jp H25 奈良女 計算機実験1 第4回 H25

H25 奈良女 計算機実験1 第4回

Cにおける乱数発生rand関数

#include <stdlib.h>#include <time.h>

unsigned seed;int randomInt;double randomDouble;

seed = (unsigned)time(NULL);!srand(seed);!printf("RAND_MAX is %d\n", RAND_MAX);printf("Seed is %d\n", seed);!for(i=0; i<100; i++){! randomInt = rand();! randomDouble = randomInt/(RAND_MAX+1);

printf("%d, %f\n", randomInt, randomDouble);}

int rand(void)疑似乱数を生成

線形合同法に基づく疑似乱数生成関数。[0, RAND_MAX]の範囲の整数値を返す。

RAND_MAXはコンパイラ毎に異なるため確認してみよう

毎回自動的に乱数の種が変わるように時間関数timeを用いて現在時刻から種を設定する

void srand(unsigned)乱数の種(初期値)を指定

[0,1)の乱数を発生

Page 9: H25 奈良女 計算機実験1 第4回seto/keisanki1/H25_kei...計算機実験1 自然情報学講座 瀬戸 繭美 seto@ics.nara-wu.ac.jp H25 奈良女 計算機実験1 第4回 H25

H25 奈良女 計算機実験1 第4回

メルセンヌ・ツイスタrand関数より品質が高く、周期が長い疑似乱数を発生させる

void init_genrand(long)乱数の種(初期値)を指定

種の代入

[0,1)の乱数を発生

#include <stdio.h>#include <time.h>

int main(){

extern void init_genrand(long);extern double genrand_real2(void);

long seed;int i;double rand;!seed = (long)time(NULL);! init_genrand(seed);!for(i=0; i<100; i++){! rand = genrand_real2();! printf("%.20f\n", rand);}return 0;}

double genrand_real2(void)疑似乱数 [0, 1) を生成

Page 10: H25 奈良女 計算機実験1 第4回seto/keisanki1/H25_kei...計算機実験1 自然情報学講座 瀬戸 繭美 seto@ics.nara-wu.ac.jp H25 奈良女 計算機実験1 第4回 H25

H25 奈良女 計算機実験1 第4回

レポート課題8

1. 区間 [0,1) の一様乱数を100個生成し、区間幅 0.2 で 5 個の区間に区切った時に各区間に落ちた疑似乱数の数を数えてファイルに書き出せ。

2. 乱数が一様であれば各区間に落ちる数の平均は N/5 と予想される。生成した疑似乱数が統計的に一様であるか、どのようにして判定したら良いか考察し、方法を述べよ。

3. 発生させる乱数を10000, 100000と増やしたときに平均値の予測精度がどれくらい上昇するか定量的に評価せよ。

メルセンヌ・ツイスタを用いて下記の課題に取り組め。

Page 11: H25 奈良女 計算機実験1 第4回seto/keisanki1/H25_kei...計算機実験1 自然情報学講座 瀬戸 繭美 seto@ics.nara-wu.ac.jp H25 奈良女 計算機実験1 第4回 H25

H25 奈良女 計算機実験1 第4回

レポート課題9

-1.5 -1 -0.5 0.5 1 1.5

-1.5

-1

-0.5

0.5

1

1.5

-1.5 -1 -0.5 0.5 1 1.5

-1.5

-1

-0.5

0.5

1

1.5 2� 1

�1

⇥1� x2dx =

��

x2+y2⇥1dxdy

モンテカルロ法により以下の積分の近似値を求めよ。疑似乱数の数Nを100, 10000, 100000と変えたときにどれくらい精度が増すか(真の値に近づくか)定量的に評価せよ。

ヒント:

一辺の長さが1の正方形と四分円を考え、正方形の中でランダムに打った点が四分円の中に入る数を数え、(四分円の面積)/(正方形の面積)を4倍すればよい。

Page 12: H25 奈良女 計算機実験1 第4回seto/keisanki1/H25_kei...計算機実験1 自然情報学講座 瀬戸 繭美 seto@ics.nara-wu.ac.jp H25 奈良女 計算機実験1 第4回 H25

H25 奈良女 計算機実験1 第4回

レポート課題10モンテカルロ法により以下の積分の近似値を求めよ。また真の値と定量的に比較せよ。

(1)

(2) �� 1

�1

�3 +�

1 � z

2�2��3 ��

1 � z

2�2

dz =

����

x

2+y

2�3)2+z

2�1dxdydz

半径1の円をz軸の周りで半径3で回転させてできるトーラスの体積

(

��

x2+y2�1

⇥1� x2 � y2dxdy =

���

x2+y2+z2�1dxdydz

Page 13: H25 奈良女 計算機実験1 第4回seto/keisanki1/H25_kei...計算機実験1 自然情報学講座 瀬戸 繭美 seto@ics.nara-wu.ac.jp H25 奈良女 計算機実験1 第4回 H25

H25 奈良女 計算機実験1 第4回

ポイント

メルセンヌ・ツイスタで[0, 1]の実数の乱数を発生させる関数genrand_real1()を用いて [-1, 1]の範囲で

実数の乱数をどうやって発生させるか?

Page 14: H25 奈良女 計算機実験1 第4回seto/keisanki1/H25_kei...計算機実験1 自然情報学講座 瀬戸 繭美 seto@ics.nara-wu.ac.jp H25 奈良女 計算機実験1 第4回 H25

H25 奈良女 計算機実験1 第4回

酔歩問題 (ランダム・ウォーク)

ある対象が一定の確率法則に従いランダムに運動し、その位置や値を決定する過程

• コイン投げ、サイコロの目の出方• 分子のブラウン運動• 株価

Page 15: H25 奈良女 計算機実験1 第4回seto/keisanki1/H25_kei...計算機実験1 自然情報学講座 瀬戸 繭美 seto@ics.nara-wu.ac.jp H25 奈良女 計算機実験1 第4回 H25

H25 奈良女 計算機実験1 第4回

確率変数と確率分布確率変数:x1, x2, ..., xn の個の値をとる変数Xに対してX = xi になる確率pi が与えられているとき, Xを確率変数という。

確率分布:確率変数Xとそれに対応する確率P(X = xi)との対応関係。

例) コイン投げの場合

X: コインの表が出る回数P: コインの表がi 回出る確率

Page 16: H25 奈良女 計算機実験1 第4回seto/keisanki1/H25_kei...計算機実験1 自然情報学講座 瀬戸 繭美 seto@ics.nara-wu.ac.jp H25 奈良女 計算機実験1 第4回 H25

H25 奈良女 計算機実験1 第4回

コイン投げの確率分布

全ての投数nのうち表が出る確率がpで、裏が出る確率がq = 1 - pであるとする。この時表がi回分子出る確率は、

例) コイン投げの場合, 続き

P(X = i) = nCi piq(n�i)

=n!

i!(n � i)!piq(n�i)

P(X = i) =n!

i!(n � i)!

�12

�npとqが等確率ならば

0 2 4 6 8 10 12 14 i0.000.050.100.150.200.250.30

pi

n = 15

n = 10

二項分布

Page 17: H25 奈良女 計算機実験1 第4回seto/keisanki1/H25_kei...計算機実験1 自然情報学講座 瀬戸 繭美 seto@ics.nara-wu.ac.jp H25 奈良女 計算機実験1 第4回 H25

H25 奈良女 計算機実験1 第4回

x

t ある分子が進行方向に時間ステップ毎に前進する際、1/2の確率で右に、1/2の確率で左に進むものとする。10000個の分子に対して前進を100回繰り返した後のxを求め、xの頻度分布と理論値を重ね合わせた図を作成せよ。

0 1-1 …2-2…012

…レポート課題11

Page 18: H25 奈良女 計算機実験1 第4回seto/keisanki1/H25_kei...計算機実験1 自然情報学講座 瀬戸 繭美 seto@ics.nara-wu.ac.jp H25 奈良女 計算機実験1 第4回 H25

H25 奈良女 計算機実験1 第4回

1次元ランダム・ウォークの確率分布全ての歩数nのうち右に移動する回数をn+、左に移動する回数をn - とすると、

全歩数nにおいて分子の位置xが従う確率分布関数は、

n = n+ + n�, x = n+ � n� n+ =n + x

2, n� =

n � x

2

P(X = x) =n

C

n+x

2

�12

� n+x

2�

12

� n�x

2

=n!

�n+x

2

�!�

n�x

2

�!

�12

�n

Page 19: H25 奈良女 計算機実験1 第4回seto/keisanki1/H25_kei...計算機実験1 自然情報学講座 瀬戸 繭美 seto@ics.nara-wu.ac.jp H25 奈良女 計算機実験1 第4回 H25

H25 奈良女 計算機実験1 第4回

Mathematicaでの頻度分布の描き方

SetDirectory[“データのあるディレクトリ名”]

data  =  ReadList[“data”,Real]  (*注:データは一行に書き出しておくこと*)

(*下は自分が試行した回数であることを確認*)n=Length[data]  

Histo  =  Histogram[data,n]

!40 !20 0 20 400246810

x

頻度

50回シミュレーションした時の頻度分布

Page 20: H25 奈良女 計算機実験1 第4回seto/keisanki1/H25_kei...計算機実験1 自然情報学講座 瀬戸 繭美 seto@ics.nara-wu.ac.jp H25 奈良女 計算機実験1 第4回 H25

H25 奈良女 計算機実験1 第4回

Mathematicaでの二項分布の理論値の描き方(*確率分布関数の定義*)prob[x_,  n_]  :=  n!/((n+x)/2)!/((n-­‐x)/2)!/2^n

(*xiが  -­‐50  から  50  までの理論値を計算し,  xiとpiのセットを作る)n  =  100numHead  =  Table[x,{x,-­‐50,50}]probSeq  =  Map[prob[#,n]&,numHead]points  =  Transpose[{numHead,n*probSeq}]

Binom  =  ListPlot[points,PlotJoined-­‐>True]

Show[Histo,  Binom]

50回シミュレーションした時の頻度分布と理論値を重ねたもの

!40 !20 0 20 400246810

x

頻度理論値

Page 21: H25 奈良女 計算機実験1 第4回seto/keisanki1/H25_kei...計算機実験1 自然情報学講座 瀬戸 繭美 seto@ics.nara-wu.ac.jp H25 奈良女 計算機実験1 第4回 H25

H25 奈良女 計算機実験1 第4回

レポート課題12

x

y

0 1-1 …2-2…

012

ある分子が進行方向に時間ステップ毎に移動する際、前(y++)、後ろ (y--)、右 (x++)、左(x--)にそれぞれ1/4の確率で移動するものとする。10000個の分子に対して移動を10, 50, 100回ずつ繰り返した後のx,yを求め、それぞれの結果についてxy平面上に分子の位置をプロットせよ。

-1-2

Page 22: H25 奈良女 計算機実験1 第4回seto/keisanki1/H25_kei...計算機実験1 自然情報学講座 瀬戸 繭美 seto@ics.nara-wu.ac.jp H25 奈良女 計算機実験1 第4回 H25

H25 奈良女 計算機実験1 第4回

Mathematicaでのxy平面上プロットの描き方

SetDirectory[“データのあるディレクトリ名”]

data  =  ReadList[“data”,{Real,Real}]  (*注:  データは一行につき一回のシミュレーション後の  x  y  を書き出しておくこと*)

(*シミュレーションの回数が表示されることを確認*)n=Length[data]  

ListoPlot[data,PlotRange-­‐>{{-­‐50,50},{-­‐50,50}},AspectRatio-­‐>1]

Page 23: H25 奈良女 計算機実験1 第4回seto/keisanki1/H25_kei...計算機実験1 自然情報学講座 瀬戸 繭美 seto@ics.nara-wu.ac.jp H25 奈良女 計算機実験1 第4回 H25

H25 奈良女 計算機実験1 第4回

レポート提出

12月20日 (金) 17:00 厳守

• 締め切りに遅れたものは受け取らない

• 数値微分、数値積分、並びに作成した全プログラムを全てホチキスでまとめ、提出

• 提出しない場合は0点。できたところだけでも必ず提出すること!