4


3

私はモンテカルロを使ってπを見つけるために多くのアルゴリズムを試しました。 解決策の1つ(Python)はこれです。

def calc_PI():nポイント= 1000000ヒット= 0

範囲(1、n_points)内のiの場合:x、y = uniform(0.0、1.0)、uniform(0.0、1.0)

(x ** 2 y ** 2)<= 1.0の場合:hits = 1

"Calc2:PI結果"、4.0 * float(hits)/ n_pointsを印刷します。

悲しいことに、1000000000でも精度が非常に悪いということです(* 3.141 …​ *)。

これはこのメソッドが提供できる最高の精度ですか? 私がモンテカルロを選んだ理由は、平行部分に分割するのがとても簡単だからです。 πに分割して計算するのが簡単な他のアルゴリズムはありますか

3 Answer


14


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


8


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

`+ N `スローの精度が高い ` floor(log_10(N))/ 2-1 `の数字を取得できるはずです。 たぶん安全のために「 -2 +」…​

それでもそれはあなたが本物のRNGか十分に良いPRNGを使っていると仮定します。


4


標準の擬似RNGの代わりに、擬似乱数ジェネレータ(http://www.nag.co.uk/IndustryArticles/introduction_to_quasi_random_numbers.pdf)を使用してください。 擬似乱数は、擬似乱数よりも積分領域(MC積分)をより均等にカバーし、収束性を高めます。