Bonjour ravi de vous rencontrer. Cette fois, j'ai commencé à écrire avec Qiita. Ravi de vous rencontrer. Eh bien, je ne sais pas quel est le premier article, mais j'ai décidé d'écrire un article sur la façon d'implémenter la méthode Monte Carlo en Python.
Quel type de méthode est la méthode de Monte Carlo en premier lieu? Comme beaucoup d'entre vous le savent peut-être, je vais l'expliquer encore une fois. La méthode de Monte Carlo en analyse numérique est souvent utilisée comme méthode de calcul approximatif de la probabilité. Vous pouvez également trouver la zone entourée d'une surface courbe fermée en deux dimensions. Cette fois, je vais essayer de trouver le rapport de circonférence par la méthode de Monte Carlo.
Tout d'abord, supposons que vous ayez quelque chose comme la figure ci-dessous.
La ligne bleue représente la circonférence d'un cercle avec un rayon de 1. Placez des points au hasard ici et comptez le nombre de points ($ n
$ S $ dans la formule est l'aire du carré. Puisque le rapport de $ p $ et $ n $ est le même que le rapport des surfaces, la formule ci-dessus est valable. La transformation de formule de $ \ pi $ à partir de la formule ci-dessus est la suivante.
Bien sûr, la probabilité n'est pas absolue, nous ne trouverons donc qu'une valeur approximative.
Calculons avec un ordinateur personnel. Comme le titre l'indique, je l'ai implémenté en Python. Voici le code source.
pi_by_monte.py
import random
#Paramètres variables
in_pi = 0
#Nombre d'exécutions
n = 100000
for i in range(n):
x = random.uniform(0, 1)
y = random.uniform(0, 1)
z = x**2 + y**2
if z <= 1:
in_pi += 1
pi_by_monte = in_pi / n * 4
print(pi_by_monte)
Vous pouvez l'implémenter avec un code étonnamment court. Dans le code source, il est exécuté 100 000 fois, mais en réalité, il doit être exécuté davantage.
Voyons maintenant le résultat de l'exécution.
#Les résultats varieront de temps en temps
3.14885
Pour le moment, nous avons réussi à obtenir jusqu'à 3,14. Mais après ça, ça ne va plus. Comme mentionné ci-dessus, la probabilité n'est pas absolue, c'est donc juste une approximation. J'ai augmenté le nombre d'exécutions à environ 100 millions et je l'ai exécuté.
#Les résultats varieront de temps en temps
3.14180064
Maintenant, il s'adapte à 3.141. Théoriquement, si vous augmentez le nombre d'exécutions tel quel, ce sera plus proche du rapport de circonférence, mais cela prendra beaucoup de ** temps **. Si c'était environ 100 000 fois, cela sortirait immédiatement, mais si c'était fait 100 millions de fois, cela prendrait plus de 3 minutes. Il est évident que le temps augmentera régulièrement si nous continuons à le porter à 1 milliard et 10 milliards. Je pense qu'il existe un moyen d'accélérer les choses, mais c'est la limite de ce programme. Au fait, je l'ai exécuté 10000 fois et j'ai utilisé matplotlib pour tracer les points. (Figure ci-dessous) J'ai tracé l'intérieur de la circonférence en rouge et les points extérieurs en bleu. La ligne noire est la circonférence. Idéalement, tout cela sera rempli, mais cela consommera beaucoup de mémoire et le temps qu'il faudra pour le traiter sera ridicule.
Cette fois, j'ai essayé de trouver le rapport de circonférence par la méthode de Monte Carlo en utilisant Python. C'est facile à trouver, mais je pense que l'on dit qu'il y a des inconvénients en termes de précision et de vitesse de traitement. Cependant, en réalité, ce sera "Qu'est-ce que la méthode Monte Carlo?" Et "Monte Carlos Ge". Veuillez essayer une fois. Si vous avez des commentaires ou des questions, veuillez laisser un commentaire.
Recommended Posts