SICPを読む(93) 3.1.2 (3) - モンテカルロ法 (2)
難航するかと思ったら、それほどでもなくて良かった。
ふむふむ。なんとなく理解出来る自分がいることに驚く。
- aとbが互いに素であることと 2^a-1 と2^b-1 が互いに素であることは同値。
- pが素数で、任意の数で割り切れる確率は、1/pである。
- 例えば素数2と、任意の数を選んだら、当然割り切れる確率は1/2になる。
- aがpで割り切れる確率 × bがpで割り切れる確率 = 1/p^2
- 確率論の勉強もしないとな・・・。
で、1-1/p^2のが総乗がゼータ関数(2)の逆数になり、
「でたらめに整数を選んで互いに素になる確率から円周率が出る」
謎だ。謎過ぎる。互いに素と円周率って全然関係ないじゃん!!
1-1/p^2のが総乗が・・・以降は理解できて無い。ゼータ関数については、数学ガールに書いてあったので後で読むとして・・・。
おぉ、素晴らしい解説が。
2つの自然数が互いに素となる確率 - ひとり予備校@国分寺 - Yahoo!ブログ
連載になってます。
コーディング
ここは簡単。
(define (monte-cario n ex) (letrec ((iter (lambda (m pass) (if (zero? m) (/ pass n) (iter (- m 1) (+ pass (if (ex) 1 0))))))) (iter n 0))) (define (monte-cario-estimate-pi test n) (sqrt (/ 6 (monte-cario n (lambda () (= (gcd (rand test) (rand test)) 1)))))) (monte-cario-estimate-pi 1000 10) ; 3.1622776601683795 (monte-cario-estimate-pi 1000 100) ; 3.188964020716403 (monte-cario-estimate-pi 1000 1000) ; 3.180887273208006 (monte-cario-estimate-pi 1000 10000) ; 3.136507342239028 (monte-cario-estimate-pi 1000 100000) ; 3.1373304915081257 (monte-cario-estimate-pi 1000 1000000) ; 3.143726770912694
物凄い事だけど、あんまり使えないのは前回と一緒だ。
またオイラーに辿りついてしまったようだ。