4

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

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... )。

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

4

3 に答える 3

14

これはモンテカルロの典型的な例です。しかし、円周率の計算を並列部分に分割しようとしている場合は、無限級数を使用して各コアに範囲を取り、結果を合計してみませんか?

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

于 2009-06-11T17:26:25.830 に答える
8

あなたの小数誤差はsqrt(N)/N = 1/sqrt(N)です。したがって、これは正確な推定値を得るには非常に非効率的な方法です。この制限は、測定の統計的性質によって設定され、打ち負かすことはできません。

投擲ではfloor(log_10(N))/2-1精度の高い桁数を取得できるはずです。Nたぶん-2安全のために...

それでも、実際の RNG または十分な PRNG を使用していると想定しています。

于 2009-06-11T17:18:03.570 に答える
4

標準の疑似 RNG の代わりに、準乱数ジェネレーター ( http://www.nag.co.uk/IndustryArticles/introduction_to_quasi_random_numbers.pdf ) を使用します。準乱数は、疑似乱数よりも均等に積分領域 (あなたが行っているのは MC 積分です) をカバーし、より良い収束をもたらします。

于 2009-06-12T12:25:04.750 に答える