質問

モンテカルロを使用して π を求めるために多くのアルゴリズムを試してきました。(Python での) 解決策の 1 つは次のとおりです。

def calc_PI():
    n_points = 1000000
    hits = 0

    for i in range(1, n_points):
        x, y = uniform(0.0, 1.0), uniform(0.0, 1.0)

        if (x**2 + y**2) <= 1.0:
            hits += 1

    print "Calc2: PI result", 4.0 * float(hits) / n_points

悲しいのは、1000000000 であっても精度が非常に悪いということです (3.141...).

これがこの方法で提供できる最大精度ですか?モンテカルロを選んだ理由は、並列部分で分割するのが非常に簡単だからです。分割して計算するのが簡単な π の別のアルゴリズムはありますか?

役に立ちましたか?

解決

これはモンテカルロの典型的な例です。しかし、円周率の計算を並列部分に分割しようとしているのであれば、無限級数を使用して各コアに範囲を持たせ、その結果を合計していくだけではどうでしょうか?

http://mathworld.wolfram.com/PiFormulas.html

他のヒント

小数エラーは消えます sqrt(N)/N = 1/sqrt(N), したがって、これは正確な見積もりを得るには非常に非効率な方法です。この制限は測定の統計的性質によって設定されており、これを超えることはできません。

についてはできるはずです floor(log_10(N))/2-1 精度の良い桁 N 投げます。多分 -2 安全のために...

その場合でも、実際の RNG または十分に優れた PRNG を使用していることを前提としています。

準乱数発生器を使用します (http://www.nag.co.uk/IndustryArticles/introduction_to_quasi_random_numbers.pdf) 標準の擬似 RNG の代わりに。擬似乱数は、擬似乱数よりも均等に積分領域 (ここで行っているのは MC 積分) をカバーするため、より良い収束が得られます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top