【円周率】モンテ・カルロ法で確率と円周率を繋ぐ
好きな言葉は「漸近」。どうもこんにちは、ジャムです。
今回は円周率の話をしようと思ったのですが、
ある致命的な大ミスをしてしまいました...
それは・・・
円周率の日を過ぎてしまったことだ!
世がホワイトデーなどと言っている間に円周率の日が過ぎ去ってしまいました。
なんかとても時期外れのような気もしますが、
確率で円周率を求める「モンテ・カルロ法」について取り上げていきます。
目次
モンテ・カルロ法の本質
モンテカルロ法は先程の通り確率で円周率を求める方法なのですが、
どのように求めるのか、ということを説明していきたいと思います。
円にボールを投げる
突然ですがジャム君は道を歩いていたところ、
2m四方の正方形とそれに内接する円を発見しました。
ジャム君は何を思ったか、持っていたボールを
正方形の中に絶対当たるように投げることにしました。
そのとき、ボールが円の内部(円周含む)に当たる確率はどれくらい?
そう、これがモンテ・カルロ法の重要な部分です。
この話をもとにモンテ・カルロ法がどのようなものなのか
説明していきます。
まず、ジャム君のボールは百発百中で正方形の中に入りますから、
正方形の内部にボールが当たる確率を1とします。
ジャムくんは無造作にボールを投げるので、
円の中にボールが当たることもあれば、当たらないこともあります。
当然面積が大きいほどボールは当たりやすくなっています。
もし円の面積が正方形の面積の半分を占めていたら、
円の中に当たる確率はとなり、
100回ボールを投げたら50回は円の中に入ります。
これはつまり、ボールをM回投げたとき、
Pはボールが円の中に入る確率、Nは円にボールが入った回数、Mはボールを投げた回数
Tは円の面積、Sは正方形の面積
が、成り立つことになります。
これは直感的にもわかりやすいと思います。
これは、
y方向に0.5mmズレた地点に当たる確率....」
などと、場合分けすることが好ましく無いので面積を用いているのです。
立式をしよう
ここで中学1年生で習う円の面積の公式を思い出してください。
当然円の面積はとなりますよね。
(この公式は円周率の値の一切を知らなくても導出できます。)
今回正方形は2m四方なので、円の半径は1m、
すなわち円の面積は㎡となりますね。
正方形の面積は2m四方なので4㎡となりますね。
つまり、これらを先程の式に当てはめてみれば、
となるので、両辺を4倍して、
となります。
すなわち、ボールを投げていったとき、
ボールが円に入る割合に4を掛ければ円周率となるわけです!
(※確率なので、多くボールを投げればその分精度が良くなります。)
実際にやってみよう!
では、説明だけでは本当かどうかわからないので、
実際にやってみましょう!
では、ボールを用意してくだs....
って、そんなことしないよ(笑)
流石に実際にボールを投げたりはしません。
なぜなら、問題点がありすぎてできないからです。
(そもそもそんな正方形描けない、
収束率悪すぎ、ジャムは運動ができないetc...)
そして、こういうときに便利なのがコンピュータです。
プログラミングをして実験をしてみたのでご覧ください。
(今回は、どのような条件で円に入ったことになるのか、
具体的にどのようにプログラムをしているのかなどは説明しません。
ご了承ください。
)
プログラムを動かして確認
まずはボールを100回投げたときから。
算出結果:3.16
誤差:0.018407346410207026
かかった時間:0ミリ秒
100回投げた程度ではこんなもんでしょう。
まだ3.14の値さえ出ていません。
次は飛んで10000回投げてみましょう!
算出結果:3.1424
誤差:8.07346410206744E-4
かかった時間:0ミリ秒
なんと10000回投げてやっと3.14の値が見えてきました。
次は大きく飛んで10億回投げていきましょう。
(このあたりになってくると処理に時間がかかってきます。)
算出結果:3.141545676
誤差:-4.697758979332889E-5
かかった時間:42649ミリ秒
な、な、なんと、10億回も投げたのに正しいのは3.1415まで・・・
なんて効率が悪い・・・
と、言うことは置いといて、円周率の値が出たではありませんか!
ただ、もうお気づきの方も居ると思いますが、
大きな欠点があるんですこれ。
モンテ・カルロ法の欠点
先程実際にプログラミングしてみた結果から分かると思いますが、
めちゃくちゃ収束率が悪いです。
実は現在円周率は31兆4千億桁(2019年3月14日更新)まで
求められていますが、
この方法で求められるのは10億回試行してたった4桁です。
小数の精度など諸々あると思いますが、精度が悪すぎるのは確かです。
確率を用いる方法である以上これは仕方ない気もしますね。
まとめ
実は、モンテ・カルロ法はプログラミングと数学を
結びつける鍵だったりします。
もともと円周率を求めるためのものではなく、
確かにそうなるよね、
という理解を深めるためのものですから、
精度が悪いのはある意味仕様なのかもしれません。
それに関連して、私のブログ更新が遅いのも仕様です。(無関係)
それでは!