【乱数で】モンテカルロ法を試してみた。【数値計算】
モンテカルロ法の本を見つけて、読んでいたらうずうずしてきて試したくなたーw
今回はここのページの円周率を求める方法を参照してみたv
大切なのはここ。
π = 扇の面積/正方形の面積 * 4
となります.すなわち,扇の面積と正方形の面積の比を4倍すればよいということになります.
ここからRubyのソースに落とす!!
(元のjavaは読めるだけで書けないよ、うわあん)
引数の数字の回数だけシミュレートします。
(引数を複数書けば、複数の精度の結果を吐きます)
exit() if ARGV.size == 0 ARGV.each{|n| n = n.to_i cin = 0 n.times{|i| x = rand() y = rand() cin = cin + 1 if (Math::sqrt(x**2 + y**2) <= 1) } print "#{n} -> " cin = cin.prec_f n = n.prec_f puts (cin/n) * 4 }
はい、ちなみに結果は
10 -> 3.2 100 -> 3.32 1000 -> 3.108 10000 -> 3.1304 100000 -> 3.14392 1000000 -> 3.144464
(乱数生成回数 -> 結果)
そこそこ出してますね。
積分計算に比べたら非効率ですが
・・・なんかロマンみたいなものがありませんか?乱数でシミュレーションするってことにw
あー、楽しかった。ねよ