ANTISECHE
Pour ne plus rien oublier !

Calcul de Pi par la méthode Monté Carlo en Python

jeudi 06 juin 2013

Contexte

La méthode Monté Carlo est une méthode visant à calculer une valeur numérique en utilisant des procédés aléatoires, c'est-à-dire des techniques probabilistes. Le nom de ces méthodes, qui fait allusion aux jeux de hasard pratiqués à Monte-Carlo, a été inventé en 1947 par Nicholas Metropolis, et publié pour la première fois en 1949 dans un article coécrit avec Stanislaw Ulam lors du développement de l’arme nucléaire. Ils ont utilisé ces méthodes probabilistes pour résoudre des équations aux dérivées partielles.

Dans le domaine de l’ingénierie, modéliser un système complexe par Monté Carlo permet d’obtenir des résultats approchés très simplement sans devoir s’imprégner de toute sa complexité. L’inconvénient est le temps de calculs qui peut être très long.

Application

Nous allons trouver un nombre approché de π en approchant le problème d’un point de vu probabiliste. La précision du résultat sera directement liée aux nombre d’histoires que seront réalisées. De ce fait, la précision du résultat sera liée à la durée de la simulation.

Soit un point M de coordonnées (x,y), où 0 < x < 1 et 0 < y < 1. On tire aléatoirement les valeurs de x et y. Le point M appartient au disque de centre (0,0) de rayon 1 si et seulement si x² + y² ≤ 1. La probabilité que le point M appartienne au disque est π⁄4. En faisant le rapport du nombre de points dans le disque au nombre de tirages, on obtient une approximation du nombre π⁄4 si le nombre de tirages est grand.

En multipliant le résultat ainsi obtenu par 4, nous obtenons notre nombre approché de Pi.

Voici ce que cela peut donner en Python

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from math import sqrt		# Importation de la fonction racine carré
from random import random	# Importation de la fonction aléatoire

NombreHistoires = 10000000	# Nombre de réalisations d'histoires
Compteur= 0			# Nombre de fois que l'on se trouve dans le cercle

for i in range(NombreHistoires):
	x = random()		# Composante sur x aléatoire
	y = random()		# Composante sur y aléatoire
	r = sqrt(x**2+y**2)	# Calcul de la distance entre le centre et le point
	if r <= 1:		# Vérification que le point se trouve dans le cercle
		Compteur = Compteur + 1

Pi = 4 * Compteur / NombreHistoires

print("Pi = %f" % Pi)

Ce qui m'a donné comme résultat pour 10 millions d'histoires: Pi = 3.142658.

Plus vous réaliserez un nombre important d'histoires et plus vous serez proche de π.

Aucun commentaire

Fil RSS des commentaires de cet article

Écrire un commentaire

Contenu de votre message :

Votre nom ou pseudo :

Votre site Internet (facultatif) :

Votre adresse e-mail (facultatif) :

Quelle est la deuxième lettre du mot hzmd ? : 

CopyLeft - 2013-17 - Toutes gauches réservées - Licence CC-BY

Valide xHtml 1.0 STRICT | Fièrement propulsé par PluXml | 0.004s | 7738 vues