モンテカルロを使用したPI桁の検索
-
13-09-2019 - |
質問
モンテカルロを使用して π を求めるために多くのアルゴリズムを試してきました。(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...).
これがこの方法で提供できる最大精度ですか?モンテカルロを選んだ理由は、並列部分で分割するのが非常に簡単だからです。分割して計算するのが簡単な π の別のアルゴリズムはありますか?
解決
これはモンテカルロの典型的な例です。しかし、円周率の計算を並列部分に分割しようとしているのであれば、無限級数を使用して各コアに範囲を持たせ、その結果を合計していくだけではどうでしょうか?
他のヒント
小数エラーは消えます 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 積分) をカバーするため、より良い収束が得られます。
所属していません StackOverflow