- ベストアンサー
乱数による円周率の求め方
乱数を発生させて円周率を求める方法があると聞いたことがあるのですが どのように計算をしたらいいのでしょうか
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
このように、乱数を使って擬似的に数値を求める方法を「モンテカルロ法」といいます。 手元の「アルゴリズム辞典」では、乱数によってπを求める方法が3つ記述されています。 一番分かりやすそうなのが、#1,ita3さんが仰ってるやリ方ですね。 「一辺の長さが1の正方形領域にランダムに点を置いていくと、それが半径1の円内に入る確率はπ/4である。これを逆に使って、πを求める」んだそうです。 昔、プログラムの勉強をする時に、これを作って遊んだ記憶があります。 ちなみに、紹介されている3つの中では一番不正確な方法らしいです。 VBAで書けば、以下のようになります。 (ワードやエクセルのマクロに登録すれば、実行できます。) Dim Ct As Long 'Counter Dim Hit As Long '円内に入った点の数 Dim X As Double Dim Y As Double Dim Ret As Long Do '何回施行したかカウント Ct = Ct + 1 '点の位置をランダムで決定 X = Rnd() Y = Rnd() '点の位置が円内かどうかを判定 If X * X + Y * Y < 1 Then Hit = Hit + 1 End If '1万回試行するごとに結果を表示 If Ct Mod 10000 = 0 Then Ret=MsgBox(Ct & "回試行しました" & vbNewLine _ & "現在の結果は " & 4*Hit / Ct & vbNewLine _ & "続けますか?" _ , vbYesNo) If Ret = vbNo Then Exit Do End If End If Loop グラフィックとか使ってやってみると、結構面白いですよ。 ちなみに、Excel上で10万回試行した結果は、3.1416でした。 これ以外の方法は 「0~1の一様乱数をX座標とする、半径1の円状の点のY座標の期待値がπ/4であることを使う」 「数値積分に関しては、乱数のかわりに、『準乱数』(単純な計算により生成される乱数もどき)を使えばより正確な結果を得られる。ことを利用する」 が紹介されています。どちらも、イマイチ理解しきれないので、詳しい説明は出来ませぬ(笑)。 準乱数を使う方式では、1000回の試行で3.14154まで得られたそうです。 参考文献 技術評論社 「コンピュータ アルゴリズム辞典」 ISBN4-87408-913-5 C3055 定価\2,300
その他の回答 (4)
- TCM
- ベストアンサー率44% (81/181)
こんばんは、TCMと申します。回答は出揃っているようですので、ちょっと#3のARCさんの補足をいたします。 ARCさんのご回答の第2の方法はこういうことです。半径1の円の第1象限について考えます。0から1のX軸上に乱数を落とします。それに対応する円周上の点のY座標は√(1-x^2)です。そして微小線分dx上に乱数が落ちる確率がdx/1であることを考えると、Y座標の期待値は、 ∫√(1-x^2)dx=π/4 となります。ただし積分範囲は0から1です。この方法は、円の第1象限の内と外に乱数を落とす場合と比べると、if文が不必要なかわりにsqrt文が必要になりますので、どっちもどっちかなと思います。 第3の方法は、第2の方法において乱数のかわりに等間隔に分布する準乱数を使うものです。まあ、一種の矩形則による数値積分みたいなもんです。でも、そんなことをするくらいなら台形則なり、シンプソン法などで素直に数値積分した方が早いし正確です。これは実は第1の方法にもいえることですけど、この円周率を求めるというのがモンテカルロ法の説明にちょうどいい材料ですので、あんまり文句はいえません。
- yusky
- ベストアンサー率0% (0/1)
モンテカルロ法と言って、弓を射って的中の確率を計算する方法なんだそうですね。 若い頃ベーシックでプログラミングして計算した経験があるので自信はあります。 1時間位計算を続けていくと3.14までは収束するのですが あまり精度は上がらなかったと記憶しています。 専門的にみればダサいプログラムかもしれませんが、内心は自慢のものです。 現在でもRUNします。 他の読者の方でも要請があればプリントアウトしたものをお送りできます。
ita3さんの回答がそうなのかと思いますが、 今から20年ほど前、大学生のとき、 モンテカルロ法という名前で、コンピュータ実習にて 有りました。 モンテカルロ法で検索すれば、何か別の切り口が 見つかると思います。
- ita3
- ベストアンサー率67% (25/37)
こういうのが見つかりました。 原理的には、x,yの点を0~1までの間で乱数発生させて かなりの数をやってみると、入る確率は、πを使った 面積の中に入るというもののようです。 なにやらやってみたところ、かなりの回数やらないと 精度が出ないそうです。でもやって見る人って尊敬します。
お礼
ありがとうございました 友達に試してもらったところ 確かに回数を増やせば近い値が出たとのことです