Wenn Sie nur das Umfangsverhältnis verwenden möchten
import math
print(math.py)
Das ist in Ordnung, aber ich würde gerne sehen, wie ich nach 3.14 suche. Daher möchte ich das Umfangsverhältnis anhand eines Wahrscheinlichkeitsmodells ermitteln.
Stellen Sie zunächst für jede der x- und y-Koordinaten eine Zufallszahl von 0 bis 1 ein und treffen Sie einen Punkt.
import random
x, y = random.random(), random.random()
Wenn die Summe von x und y im Quadrat und addiert innerhalb von 1 liegt, befindet sich der Punkt innerhalb eines Kreises mit einem Radius von 1.
number = x ** 2 + y ** 2 #Innerhalb des Kreises, wenn dieser innerhalb von 1 liegt
Wiederholen Sie dies viele Male, und wenn die Anzahl der Wiederholungen der Nenner ist und die Anzahl der Wiederholungen innerhalb von 1 x 4 (unter der Annahme, dass in allen Quadranten das gleiche Ergebnis erzielt wird) das Molekül ist, wird das Umfangsverhältnis berechnet. Versuchen wir es ungefähr 1000 Mal.
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 #Alle Quadranten
print(incount * quadrant / iteration)
3.2
Nun, es ist subtil. Es scheint, dass die Anzahl gering war, also versuchen wir es 10 Millionen Mal.
#Es dauert ungefähr 5 Sekunden
3.141382
Ist es gut?
Ich war nicht wirklich beeindruckt, als die Zahlen herauskamen, also lassen Sie es uns mit matplotlib visualisieren.
Erste 1000-fache Version
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()
Warten Sie ca. 10 Sekunden ...
Es ist nicht leicht zu verstehen, also probieren wir die Version 10 Millionen Mal aus.
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()
Wenn Sie dies getan haben, gehen Sie einen Spaziergang von Ihrem Computer weg. Wenn Sie zurückkommen, sollte der Vorgang abgeschlossen sein.
Es ist einfacher zu verstehen, wenn Sie das Diagramm quadratisch machen, aber Sie können sehen, dass es in einem schönen Bogen verteilt ist.
Das zu berechnen bedeutet nicht, dass irgendetwas geboren wird, aber wenn Sie interessiert sind, würde ich es begrüßen, wenn Sie es versuchen könnten.
Information Processing Society
Recommended Posts