Module 2/exo 1: mise à jour et version anglaise
-
Maintainer
À propos du calcul de $\pi$
1
À propos du calcul de $\pi$
En demandant à la lib maths
Mon ordinateur m'indique que $\pi$ vaut approximativement 1
En demandant à la lib maths
2 Mon ordinateur m'indique que $\pi$ vaut approximativement from math import * print(pi) 1 from math import * 2 print(pi) 3.141592653589793 1
En utilisant la méthode des aiguilles de Buffon
2 Mais calculé avec la méthode des aiguilles de Buffon, on obtiendrait comme approximation : 3 1 import numpy as np 2 np.random.seed(seed=42) 3 N = 10000 4 x = np.random.uniform(size=N, low=0, high=1) 5 theta = np.random.uniform(size=N, low=0, high=pi/2) 6 2/(sum((x+np.sin(theta))>1)/N) 3.1289111389236548 1
Avec un argument "fréquentiel" de surface
2 Sinon, une méthode plus simple à comprendre et ne faisant pas intervenir d'appel à la fonction sinus se base sur le fait que si $X\sim U(0,1)$ et $Y\sim U(0,1)$ alors $P[X^2+Y^2\leq 1] = \pi/4$ (voir méthode de Monte Carlo sur Wikipedia). Le code suivant illustre ce fait : 1 %matplotlib inline
2 import matplotlib.pyplot as plt 3 4 np.random.seed(seed=42) 5 N = 1000 6 x = np.random.uniform(size=N, low=0, high=1) 7 y = np.random.uniform(size=N, low=0, high=1) 8 9 accept = (xx+yy) <= 1 10 reject = np.logical_not(accept) 11 12 fig, ax = plt.subplots(1) 13 ax.scatter(x[accept], y[accept], c='b', alpha=0.2, edgecolor=None) 14 ax.scatter(x[reject], y[reject], c='r', alpha=0.2, edgecolor=None) 15 ax.set_aspect('equal')1 Il est alors aisé d'obtenir une approximation (pas terrible) de $\pi$ en comptant combien de fois, en moyenne, $X^2 + Y^2$ est inférieur à 1 : 1 4*np.mean(accept) 3.1120000000000001