Question

J'ai essayé beaucoup d'algorithmes pour trouver π en utilisant Monte Carlo. L'une des solutions (en Python) est la suivante:

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

Le plus triste est que même avec la précision 1000000000 est très mauvais ( 3,141 ... ).

Est-ce la précision maximale de cette méthode peut offrir? La raison pour laquelle je choisis Monte Carlo est qu'il est très facile de le casser dans des parties parallèles. Y at-il un autre algorithme pour π qui est facile à casser en morceaux et calculer?

Était-ce utile?

La solution

Ceci est un exemple classique de Monte Carlo. Mais si vous essayez de briser le calcul de pi en parties parallèles, pourquoi ne pas simplement utiliser une série infinie et que chaque noyau Acceptent une gamme, puis additionnez les résultats que vous allez?

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

Autres conseils

Votre erreur fractionnelle passe sqrt(N)/N = 1/sqrt(N), c'est donc une façon très inefficace pour obtenir une estimation précise. Cette limite est définie par la nature statistique de la mesure et ne peut pas être battu.

Vous devriez être en mesure de se déplacer chiffres floor(log_10(N))/2-1 de bonne précision pour N lance. -2 Peut-être juste pour être sûr ...

Même à ce qu'il suppose que vous utilisez un vrai RNG ou un assez bon PRNG.

utiliser un générateur de nombres quasi aléatoires ( http://www.nag.co. Royaume-Uni / IndustryArticles / introduction_to_quasi_random_numbers.pdf ) au lieu d'une norme pseudo RNG. numéros aléatoires couvrent la quasi zone d'intégration (ce que vous faites est une intégration MC) de façon plus égale que des nombres pseudo-aléatoires, ce qui donne une meilleure convergence.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top