モンテカルロ シミュレーション
DESCRIPTION
P129. モンテカルロ シミュレーション. 乱数を使ったシミュレーション. モンテ・カルロ. モナコ 公国 の北部を占める地区。 南の首都モナコ市とは港を挟んで反対側(北)に位置する。 1856 年シャルル 3 世が公国の財源確保のため 賭博 (とばく)場( カジノ )の開設を許可、 1861 年に開設して以来、 カンヌ 、 ニース と並び、地中海の コート・ダジュール 有数の 観光 ・保養地、海水浴場として発達した。. モンテ・カルロ. C言語での乱数発生. rand( ) 0 ~ RAND_MAX までの ランダムな整数値が発生する。 (32767) - PowerPoint PPT PresentationTRANSCRIPT
モンテカルロモンテカルロシミュレーションシミュレーション乱数を使ったシミュレーション乱数を使ったシミュレーション
P129
モンテ・カルロモンテ・カルロ
モナコ公国の北部を占める地区。南の首都モナコ市とは港を挟んで反対側(北)に位置する。1856 年シャルル 3 世が公国の財源確保のため賭博(とばく)場(カジノ)の開設を許可、 1861 年に開設して以来、カンヌ、ニースと並び、地中海のコート・ダジュール有数の観光・保養地、海水浴場として発達した。
モンテ・カルロモンテ・カルロ
C言語での乱数発生C言語での乱数発生
rand( ) 0 ~ RAND_MAX までのランダムな整数値が発生する。(32767)
#include<stdlib.h> を使用
プログラム例プログラム例#include <stdio.h>#include <stdio.h>#include <stdlib.h>int main()int main(){{
int irandx, i, n=4;int irandx, i, n=4;for(i=0;i<n;i++){for(i=0;i<n;i++){
irandx = irandx = rand();rand();printf("%d\n",irandx);printf("%d\n",irandx);
}}return 0;return 0;
}}
0~1の乱数の発生0~1の乱数の発生
0 ~ 1 の実数を与えるには、rand( ) を最大値 RAND_MAX で割る。
例:randx = (double) rand()/(double) RAND_MAX;
プログラム例プログラム例#include <stdio.h>#include <stdio.h>#include <stdlib.h>int main()int main(){{ int i, n=4;int i, n=4; double randx;double randx; for(i=0;i<n;i++){for(i=0;i<n;i++){ randx = randx = (double)rand()/(double)RAND_MAX(double)rand()/(double)RAND_MAX;; printf("%lf\n",randx);printf("%lf\n",randx);
}}return 0;return 0;
}}
円の面積円の面積
0.5- 0.5
0.5
- 0.5
0
円の面積=(円内の個数)/(全部の個数)
円の面積円の面積
0.5- 0.5
0.5
- 0.5
0
(x1, x2)
円内の条件 ⇒ ( x12 + x2
2 ) <0.25
球の体積球の体積
(x1, x2, x3)
球内の条件 ⇒ ( x12 + x2
2 + x3
2 ) <0.25
多次元空間の球内の条件多次元空間の球内の条件
三次元x1
2 + x22 + x3
2 < 0.25四次元
x12 + x2
2 + x32 + x4
2 < 0.25五次元
x12 + x2
2 + x32 + x4
2 + x52 < 0.25
ただし,‐ 0.5 < x1, x2, x3, x4, x5 < 0.5
多次元空間の球の体積多次元空間の球の体積
乱数で, x1, x2, x3, … を生成
m[j]=0
x12 + x2
2 + x32
<0.25
YesNo
m[j]=m[j]+1
繰り返し数:N
体積= m[j]/N
#include <stdio.h>#include <stdlib.h>#include <math.h>#define N 10000#define DIM 5int main( ){
double x[DIM], r[DIM];int n, j;double rr;int m[DIM+1];for(j=0;j<DIM;j++)
m[j]=0;
乱数の点数
5次元まで
球内の個数をカウントする変
数
printf(" 回数 円面積 球体積 四次元 五次元 \n\n");for(n=1;n<=N;n++){for(j=0;j<DIM;j++){
x[j]=(double)rand()/32768.;r[j]=0.0;
}rr=0.0;for(j=0;j<DIM;j++){
rr+=(x[j]-0.5)*(x[j]-0.5);r[j]=rr;
}for(j=0;j<DIM;j++)
if(r[j]<0.25) m[j]++;if((n%1000)==0){
printf("%6d ",n);for(j=1;j<DIM;j++)
printf("%9.4lf ",(double)m[j]/(double)n);printf("\n");
}}return 0;
}
乱数発生0~1
各次元ごと距離を計算
各次元ごと球内点を加算
全点数で割って球体積を計算」
乱数の初期値を変更する乱数の初期値を変更する
srand((unsigned)time(NULL));
を rand() の前に入れる。
#include<time.h>; を使用
プログラム例プログラム例#include <stdio.h>#include <stdio.h>#include <stdlib.h>#include <time.h>int main()int main(){{ int i, n=4;int i, n=4; double randx;double randx; srand((unsigned)time(NULL));
for(i=0;i<n;i++){for(i=0;i<n;i++){
randx = (double)rand()/(double)RAND_MAX;randx = (double)rand()/(double)RAND_MAX;
printf(printf(""%lf\n",randx);%lf\n",randx);
}}return 0;return 0;
}}
例題例題
15分間隔でくるバスの待つ時間の平均15分間隔でくるバスの待つ時間の平均??
0 15 30 45
待つ時間:0~15分
15分間隔のバスを待つ時間15分間隔のバスを待つ時間#include <stdio.h>#include <stdio.h>#include <stdlib.h>#include <time.h>int main()int main(){{ int i, n=100;int i, n=100; double randx=0.0;double randx=0.0; srand((unsigned)time(NULL));
for(i=0;i<n;i++)for(i=0;i<n;i++)
randx += 15* (double)rand()/(double)RAND_MAX;randx += 15* (double)rand()/(double)RAND_MAX;
randx=randx/(double)n;randx=randx/(double)n;
printf(printf(““%lf\n",randx);%lf\n",randx);return 0;return 0;
}}
15分間隔のバス
10分以上待つ確率を求めるプログラムを書け。
学部コード;25 時間割コード;63270 曜日・時限:木2