Essayez d'implémenter la méthode Monte Carlo en Python

introduction

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.

Qu'est-ce que la méthode Monte Carlo?

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.

Comment 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. 4.png 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 ) et le nombre de points ( p $) placés dans la circonférence. Ensuite, la formule suivante est valable pour la méthode de Monte Carlo.

\frac{r^2\pi}{4S}=\frac{p}{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.

\pi=\frac{4Sp}{nr^2}

Bien sûr, la probabilité n'est pas absolue, nous ne trouverons donc qu'une valeur approximative.

Implémenté en Python

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.

résultat

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) 2.png 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.

Sommaire

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

Essayez d'implémenter la méthode Monte Carlo en Python
Simuler la méthode Monte Carlo en Python
Implémentons Yuma dans Python 3
Essayez d'utiliser l'API Wunderlist en Python
Essayez d'utiliser l'API Kraken avec Python
Méthode #Monte Carlo pour trouver le rapport de circonférence en utilisant Python
Essayez d'implémenter deux piles en Python sur un seul tableau
Apprenez le modèle de conception "Méthode de modèle" en Python
Essayez d'utiliser l'API BitFlyer Ligntning en Python
J'ai essayé la méthode des moindres carrés en Python
Pour remplacer dynamiquement la méthode suivante en python
Apprenez le modèle de conception "Méthode d'usine" en Python
Méthode Simplex (méthode unique) en Python
Essayez gRPC en Python
Méthode privée en python
Essayez 9 tranches en Python
Essayez d'utiliser l'API DropBox Core avec Python
Déterminer le seuil à l'aide de la méthode P-tile en python
Essayez d'implémenter la mémoire associative par hop field network en Python
Introduction à la méthode Monte Carlo
Trouver des erreurs en Python
Suppression des substitutions de méthode en Python
Essayez de gratter les données COVID-19 Tokyo avec Python
Augmentez la vitesse de la méthode Monte Carlo de l'implémentation de découpage Cython.
Saupoudrer de grains de riz pour trouver le rapport de circonférence (méthode de Monte Carlo)
Comment utiliser la méthode __call__ dans la classe Python
Recherche du rapport de circonférence avec une fonction à 3 lignes [méthode Python / Monte Carlo]
Comprendre la méthode Metropolitan Hasting (une des méthodes de la méthode Monte Carlo en chaîne de Markov) avec implémentation
Essayez d'implémenter Yuma en langage Go
Obtenir l'API arXiv en Python
Python dans le navigateur: la recommandation de Brython
Enregistrez le fichier binaire en Python
Frappez l'API Sesami en Python
Essayez le SDK Python LINE Pay
Obtenez le chemin du bureau en Python
Essayez d'utiliser LevelDB avec Python (plyvel)
Obtenez le chemin du script en Python
Essayons Fizz Buzz avec Python
Dans la commande python, python pointe vers python3.8
Implémenter le modèle Singleton en Python
Essayez de calculer Trace en Python
Essayez l'accès au registre PLC en Python
Implémentation de la méthode de propagation d'étiquettes en Python
Estimation de π par la méthode de Monte Carlo
Accédez à l'API Web en Python
Méthode Hash (méthode d'adresse ouverte) en Python
J'ai écrit la file d'attente en Python
Calculer le mois précédent en Python
Examiner la classe d'un objet avec python
Obtenez le chemin du bureau en Python
Essayez Cython dans les plus brefs délais
Accéder à l'API Twitter avec Python
Essayez d'utiliser LeapMotion avec Python
La première étape de Python Matplotlib
J'ai écrit la pile en Python
Maîtriser le module lowref en Python