モンテカルロ法
モンテカルロ法を用いてπを求める
ある問題を確率(乱数)を用いて解くことをモンテカルロ法といいます。円周率πをこの方法で求めてみます。
~ の一葉実数乱数を2つ発生させ、それらを 、 とします。こうした乱数の組をいくつか発生させると、 の正方形の中に、 で示される点は均一にばらまかれると考えられます。
したがって、正方形の面積と 円の面積の比は、ばらまかれた乱数の数に比例するはずです。
円の中にばらまかれた乱数の数を 、円外にばらまかれた乱数の数を とすると、次の関係が成立します。
プログラム
#include <iostream> #include <iomanip> #include <math.h> #include <stdlib.h> using namespace std; #define NUM 330000 double rnd(void); int main(){ double x,y,pai; int i,in=0; for (i=0;i<NUM;i++){ x=rnd(); y=rnd(); if (x*x+y*y<=1) in++; } pai=(double)4*in/NUM; cout << "Pi=" << pai << endl; return 0; } double rnd(void) { return ((double)rand()/32767.1); }
実行結果
Pi=3.14156