Si vous souhaitez simplement utiliser le rapport de circonférence
import math
print(math.py)
C'est bien, mais j'aimerais voir comment je recherche la version 3.14. Par conséquent, j'aimerais trouver le rapport de circonférence à l'aide d'un modèle probabiliste.
Tout d'abord, définissez un nombre aléatoire de 0 à 1 pour chacune des coordonnées x et y et frappez un point.
import random
x, y = random.random(), random.random()
Si la somme de x et y au carré et additionnés l'un à l'autre est inférieure à 1, le point est à l'intérieur d'un cercle avec un rayon de 1.
number = x ** 2 + y ** 2 #À l'intérieur du cercle si c'est à moins de 1
Répétez cela plusieurs fois, et si le nombre de répétitions est le dénominateur et le nombre de fois qui était dans 1 x 4 (en supposant que le même résultat est obtenu dans tous les quadrants) est le numérateur, le rapport de circonférence est calculé. Essayons environ 1000 fois.
import random
incount = 0
def GenerateRandom():
x, y = random.random(), random.random()
number = x ** 2 + y ** 2
return number
iteration = 1000
for ite in range(iteration):
check = GenerateRandom()
if (check < 1):
incount += 1
quadrant = 4 #Tous les quadrants
print(incount * quadrant / iteration)
3.2
Eh bien, c'est subtil. Il semble que le nombre était petit, alors essayons-le 10 millions de fois.
#Cela prend environ 5 secondes
3.141382
Est-ce bien?
Je n'ai pas été vraiment impressionné lorsque les chiffres sont sortis, alors visualisons-le avec matplotlib.
Première version 1000 fois
import random
import matplotlib.pyplot as plt
def GenerateRandom():
x, y = random.random(), random.random()
number = x ** 2 + y ** 2
return [number, x, y]
iteration = 1000
for ite in range(iteration):
check = GenerateRandom()
if (check[0] < 1):
plt.scatter(check[1], check[2], c = 'red', s = 10)
else:
plt.scatter(check[1], check[2], c='blue', s = 10)
plt.title('Monte Carlo Method')
plt.xlabel("x")
plt.ylabel("y")
plt.show()
Attendez environ 10 secondes ...
Ce n'est pas facile à comprendre, alors essayons la version 10 millions de fois.
import random
import matplotlib.pyplot as plt
def GenerateRandom():
x, y = random.random(), random.random()
number = x ** 2 + y ** 2
return [number, x, y]
iteration = 10000000
for ite in range(iteration):
check = GenerateRandom()
if (check[0] < 1):
plt.scatter(check[1], check[2], c = 'red', s = 10)
else:
plt.scatter(check[1], check[2], c='blue', s = 10)
plt.title('Monte Carlo Method')
plt.xlabel("x")
plt.ylabel("y")
plt.show()
Une fois que vous avez fait cela, éloignez-vous de votre ordinateur. Au moment où vous reviendrez, le processus devrait être terminé.
Il est plus facile de comprendre si vous faites le carré du graphique, mais vous pouvez voir qu'il est distribué dans un bel arc.
Calculer cela ne signifie pas que quelque chose est né, mais si vous êtes intéressé, j'apprécierais que vous puissiez l'essayer.
Société de traitement de l'information
Recommended Posts