C'est une histoire que j'ai essayé d'estimer le rapport de circonférence de manière probabiliste (à proprement parler, méthode de Monte Carlo) en utilisant la bibliothèque standard de Python aléatoire. (Temps de lecture prévu: 4 minutes)
Imaginez les coordonnées xy.
Tracez un cercle de rayon r (appelons-le C) centré sur l'origine O et un carré de côté 2r (appelons-le S).
En S, continuez à frapper des points au hasard.
Lorsque vous atteignez suffisamment de points pour remplir l'intérieur de S, vous pouvez dire "le nombre de points dans S: le nombre de points dans C ≒ l'aire de S: l'aire de C".
Si le nombre de points dans S est "s_dot_num" et le nombre de points dans C est "c_dot_num",
(c_dot_num) / (s_dot_num) = Aire de C / Aire de S = (π * r au carré) / (2r) au carré = π / 4
Parce que ça devient
π = 4 * (c_dot_num) / (s_dot_num)
J'ai pu définir. Après cela, si vous pouvez trouver respectivement c_dot_num et s_dot_num, vous pouvez estimer la valeur de π. (La valeur de r ne semble pas avoir d'importance)
Cette fois, je l'ai écrit en Python.
estimate_pi.py
#Les points sont placés au hasard dans un carré avec une longueur de côté de 1, et le rapport de circonférence est estimé.
import random
def estimate_pi(n):
c_dot_num = 0
s_dot_num = 0
for _ in range(n):
x = random.uniform(0, 1)
y = random.uniform(0, 1)
distance = x**2 + y**2
if distance <= 1:
c_dot_num += 1
s_dot_num += 1
pi = 4 * c_dot_num / s_dot_num
return pi
if __name__ == '__main__':
print('Lorsqu'il y a 100 points, le rapport de circonférence est{}'.format(estimate_pi(100)))
print('Lorsqu'il y a 1000 points, le rapport de circonférence est{}'.format(estimate_pi(1000)))
print('Lorsqu'il y a 10000 points, le rapport de circonférence est{}'.format(estimate_pi(10000)))
print('Lorsqu'il y a 100 000 points, le rapport de circonférence est{}'.format(estimate_pi(100000)))
※image
Première fois Deuxième fois Troisième fois
Il s'agit d'environ 3,141. À mesure que le nombre d'essais n (= le nombre de fois pour atteindre le point) augmente, la précision augmente.
Cette fois, j'ai essayé d'estimer le rapport de circonférence en utilisant des nombres aléatoires. Sur le plan académique, la méthode d'estimation d'une certaine valeur à l'aide de nombres aléatoires est appelée «méthode de Monte Carlo».
Le code en lui-même n'est pas du tout difficile, mais quand je l'ai appris pour la première fois, j'étais ravi de dire: "Existe-t-il une telle approche!", Donc pour rappel.
Recommended Posts