Frage

Ich habe viele Algorithmen versucht, für die Suche nach π Monte Carlo mit. Eine der Lösungen (in Python), ist dies:

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

Der traurige Teil ist, dass auch bei 1000000000 die Präzision ist sehr schlecht ( 3.141 ... ).

Ist das die höchste Präzision dieses Verfahren anbieten? Der Grund, warum ich Monte Carlo wählen war, dass es sehr einfach, sie in parallelen Teilen zu brechen. Gibt es einen anderen Algorithmus für π, die einfach in Stücke zu brechen und berechnen?

War es hilfreich?

Lösung

Dies ist ein klassisches Beispiel für Monte Carlo. Aber wenn Sie versuchen, die Berechnung der Zahl Pi in parallele Teile zu brechen, warum nicht nur eine unendliche Serie verwenden und lassen Sie jeder Kern eine Reihe nehmen, dann die Ergebnisse zusammenfassen, wie Sie gehen?

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

Andere Tipps

Ihr fraktionierter Fehler geht durch sqrt(N)/N = 1/sqrt(N), so ist dies ein sehr ineffizienter Weg, um eine genaue Schätzung zu erhalten. Diese Grenze wird durch die statistische Natur der Messung festgelegt und kann nicht geschlagen werden.

Es soll möglich sein, über floor(log_10(N))/2-1 Ziffern guter Präzision erhalten für N wirft. Vielleicht -2 nur um sicher zu sein ...

Selbst bei, dass es davon ausgeht, dass Sie eine echte RNG oder gut genug PRNG verwenden.

Verwenden Sie einen quasi-Zufallszahlengenerator ( http://www.nag.co. uk / IndustryArticles / introduction_to_quasi_random_numbers.pdf ) anstelle eines Standard-Pseudo RNG. Quasi Zufallszahlen decken den Integrationsbereich (was Sie tun, ist eine MC-Integration) gleichmäßiger als Pseudo-Zufallszahlen, was eine bessere Konvergenz.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top