-PR-
解決済み

乱数による円周率の求め方

  • 暇なときにでも
  • 質問No.9576
  • 閲覧数1090
  • ありがとう数13
  • 気になる数0
  • 回答数5
  • コメント数0

お礼率 42% (249/587)

乱数を発生させて円周率を求める方法があると聞いたことがあるのですが
どのように計算をしたらいいのでしょうか
通報する
  • 回答数5
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.3
レベル13

ベストアンサー率 46% (643/1383)

このように、乱数を使って擬似的に数値を求める方法を「モンテカルロ法」といいます。
手元の「アルゴリズム辞典」では、乱数によってπを求める方法が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
お礼コメント
frank

お礼率 42% (249/587)

ありがとうございました
友達に試してもらったところ
確かに回数を増やせば近い値が出たとのことです
投稿日時 - 0000-00-00 00:00:00
-PR-
-PR-

その他の回答 (全4件)

  • 回答No.1
レベル8

ベストアンサー率 67% (25/37)

こういうのが見つかりました。 原理的には、x,yの点を0~1までの間で乱数発生させて かなりの数をやってみると、入る確率は、πを使った 面積の中に入るというもののようです。 なにやらやってみたところ、かなりの回数やらないと 精度が出ないそうです。でもやって見る人って尊敬します。 ...続きを読む
こういうのが見つかりました。
原理的には、x,yの点を0~1までの間で乱数発生させて
かなりの数をやってみると、入る確率は、πを使った
面積の中に入るというもののようです。
なにやらやってみたところ、かなりの回数やらないと
精度が出ないそうです。でもやって見る人って尊敬します。


  • 回答No.2

ita3さんの回答がそうなのかと思いますが、 今から20年ほど前、大学生のとき、 モンテカルロ法という名前で、コンピュータ実習にて 有りました。 モンテカルロ法で検索すれば、何か別の切り口が 見つかると思います。
ita3さんの回答がそうなのかと思いますが、
今から20年ほど前、大学生のとき、
モンテカルロ法という名前で、コンピュータ実習にて
有りました。
モンテカルロ法で検索すれば、何か別の切り口が
見つかると思います。
  • 回答No.4
レベル6

ベストアンサー率 0% (0/1)

モンテカルロ法と言って、弓を射って的中の確率を計算する方法なんだそうですね。 若い頃ベーシックでプログラミングして計算した経験があるので自信はあります。 1時間位計算を続けていくと3.14までは収束するのですが あまり精度は上がらなかったと記憶しています。 専門的にみればダサいプログラムかもしれませんが、内心は自慢のものです。 現在でもRUNします。 他の読者の方でも要請があればプリントアウト ...続きを読む
モンテカルロ法と言って、弓を射って的中の確率を計算する方法なんだそうですね。
若い頃ベーシックでプログラミングして計算した経験があるので自信はあります。
1時間位計算を続けていくと3.14までは収束するのですが
あまり精度は上がらなかったと記憶しています。
専門的にみればダサいプログラムかもしれませんが、内心は自慢のものです。
現在でもRUNします。
他の読者の方でも要請があればプリントアウトしたものをお送りできます。
  • 回答No.5
レベル10

ベストアンサー率 44% (81/181)

 こんばんは、TCMと申します。回答は出揃っているようですので、ちょっと#3のARCさんの補足をいたします。  ARCさんのご回答の第2の方法はこういうことです。半径1の円の第1象限について考えます。0から1のX軸上に乱数を落とします。それに対応する円周上の点のY座標は√(1-x^2)です。そして微小線分dx上に乱数が落ちる確率がdx/1であることを考えると、Y座標の期待値は、   ∫√(1-x^ ...続きを読む
 こんばんは、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の方法にもいえることですけど、この円周率を求めるというのがモンテカルロ法の説明にちょうどいい材料ですので、あんまり文句はいえません。
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このQ&Aにこう思った!同じようなことあった!感想や体験を書こう
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


新大学生・新社会人のパソコンの悩みを解決!

いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ