アプリ版:「スタンプのみでお礼する」機能のリリースについて

・円周率を求めるための当たり外れの試行を、10000回行うことによって、円周率の値の1回分を求める。
・円周率を100回求めて、その平均値を答えとして表示

これをモンテカルロ法によって求めるプログラムを教えてください。
説明も加えてください。お願い致します!

A 回答 (4件)

>これをモンテカルロ法によって求めるプログラムを教えてください。



そのアルゴリズムを考えるところからがプログラミングなんじゃない?
    • good
    • 0

ググってみましょう。



モンテカルロ法で円周率を求める
http://www.cmpt.phys.tohoku.ac.jp/open-campus/20 …

モンテカルロ法を用いて円周率を求めるプログラム
https://www.rs.kagu.tus.ac.jp/yamalab/2010/haman …
    • good
    • 0

コードをここに書けというのなら、


使用言語を指定しなきゃ話になるまい。
    • good
    • 0

企業で統計を推進する立場の者です。



既に回答は#2さんによって示されていますが、オーソドックスなアルゴリズムを説明し、Rで書いてみました。それをご使用中の言語に直して下されば幸甚です。

円周率をπとする。
x軸y軸とも±rとなる正方形を考える。その面積は4r^2
半径rの円を考える。その面積はπr^2
πは面積比で与えられる。すなわち、π=4・(円の面積)/(正方形の面積)
この面積比を、±rの範囲に打点された一様乱数の座標数で代用する。
(簡単のためにr=1とする)

sum((x1^2 + x2^2) <= 1) は、本来であれば、x座標^2+y座標^2の平方根が半径ですから√が必要ですが、半径を1とすることによって計算負荷を下げています。学校の課題であれば、
sum(sqrt(x1^2 + x2^2) <= 1)
として下さいね。

~~~~~~~~~~~~~~~~~~~~~

pai <- NULL
i <- 0

while(i < 100){

x1 <- runif(10000, -1, 1)
x2 <- runif(10000, -1, 1)

p <- 4 * sum((x1^2 + x2^2) <= 1) / 10000

pai <- append(pai, p)

i <- i + 1

}

mean(pai)
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!