0

私はプログラミングを始めたばかりで、この割り当ては私に多くの問題を与えています。以下のモンテカルロコード(曲線の下の面積に使用)を変更して、円周率を推定するにはどうすればよいですか?

from random import uniform
from math import exp

def estimate_area(f, a, b, m, n=1000):
    hits = 0
    total = m * (b - a)
    for i in range(n):
        x = uniform(a, b)
        y = uniform(0, m)
        if y <= f(x):
            hits += 1
    frac = hits / n
    return frac * total

def f(x):
    return exp(-x**2)

def main():
    print(estimate_area(f, 0, 2, 1))

main()

どんな助けでも大歓迎です。ありがとうございました。

4

2 に答える 2

3

私はこれを解決しませんが、ヒントを提供します。単位円を 2x2 の正方形に埋め込むことと、それが π の推定にどのように役立つかを考えてみてください。それがわかったら、固有の対称性を利用して、4 つの象限の 1 つだけを操作します。

于 2012-12-17T11:29:05.680 に答える
0

これは、モンテカルロ法の一般的な例です。たとえば、モンテカルロ法に関するウィキペディアのページを参照してください。この問題を 1 つの象限だけで考えてみましょう。円の 4 分の 1 は 0,0 を中心とし、半径は 1 で、(0,0) から (1,1) までの正方形です。と の正方形にランダムに点を入れるx=uniform(0,1)y=uniform(0,1)、その点が四分円 の中にあるかどうかを確認できます(x^2.+y^2.)^0.5 <= 1.0。これが発生する可能性は、2 つのオブジェクトの体積の比率に関連しています。

于 2014-12-05T01:23:37.313 に答える