Hallo schön zu treffen. Dieses Mal begann ich mit Qiita zu schreiben. Freut mich, dich kennenzulernen. Nun, ich weiß nicht, was der erste Artikel ist, aber ich habe beschlossen, einen Artikel über die Implementierung der Monte-Carlo-Methode in Python zu schreiben.
Was für eine Methode ist die Monte-Carlo-Methode überhaupt? Wie viele von Ihnen vielleicht wissen, werde ich es noch einmal erklären. Die Monte-Carlo-Methode in der numerischen Analyse wird häufig als Methode zur ungefähren Berechnung der Wahrscheinlichkeit verwendet. Sie können den Bereich auch von einer geschlossenen, gekrümmten Oberfläche in zwei Dimensionen umgeben finden. Dieses Mal werde ich versuchen, das Umfangsverhältnis nach der Monte-Carlo-Methode zu ermitteln.
Angenommen, Sie haben so etwas wie die folgende Abbildung.
Die blaue Linie repräsentiert den Umfang eines Kreises mit einem Radius von 1. Platzieren Sie hier zufällig Punkte und zählen Sie die Anzahl der Punkte ($ n
$ S $ in der Formel ist die Fläche des Quadrats. Die obige Formel gilt, weil das Verhältnis von $ p $ und $ n $ dem Verhältnis der Flächen entspricht. Die Formeltransformation von $ \ pi $ aus der obigen Formel ist wie folgt.
Natürlich ist die Wahrscheinlichkeit nicht absolut, daher finden wir nur einen ungefähren Wert.
Berechnen wir mit einem PC. Wie der Titel schon sagt, habe ich es in Python implementiert. Unten ist der Quellcode.
pi_by_monte.py
import random
#Variable Einstellungen
in_pi = 0
#Häufigkeit der Ausführung
n = 100000
for i in range(n):
x = random.uniform(0, 1)
y = random.uniform(0, 1)
z = x**2 + y**2
if z <= 1:
in_pi += 1
pi_by_monte = in_pi / n * 4
print(pi_by_monte)
Sie könnten es mit einem überraschend kurzen Code implementieren. Im Quellcode wird es 100.000 Mal ausgeführt, aber in Wirklichkeit muss es mehr ausgeführt werden.
Nun sehen wir uns das Ergebnis der Ausführung an.
#Die Ergebnisse variieren von Zeit zu Zeit
3.14885
Derzeit ist es uns gelungen, bis zu 3.14 abzuleiten. Aber danach passt es nicht mehr. Wie oben erwähnt, ist die Wahrscheinlichkeit nicht absolut, es handelt sich also nur um eine Annäherung. Ich habe die Anzahl der Hinrichtungen auf etwa 100 Millionen erhöht und ausgeführt.
#Die Ergebnisse variieren von Zeit zu Zeit
3.14180064
Jetzt passt es auf 3.141. Wenn Sie die Anzahl der Ausführungen so erhöhen, wie sie ist, liegt sie theoretisch näher am Umfangsverhältnis, aber es wird sehr viel Zeit in Anspruch nehmen. Wenn es ungefähr 100.000 Mal war, würde es sofort herauskommen, aber wenn es 100 Millionen Mal gemacht wurde, dauerte es mehr als 3 Minuten. Es ist offensichtlich, dass die Zeit stetig zunehmen wird, wenn wir sie weiter auf 1 Milliarde und 10 Milliarden erhöhen. Ich denke, es gibt eine Möglichkeit, es schneller zu machen, aber dies ist die Grenze für dieses Programm. Übrigens habe ich es 10000 Mal ausgeführt und Matplotlib verwendet, um die Punkte tatsächlich zu zeichnen. (Abbildung unten) Ich habe die Innenseite des Umfangs in Rot und die Außenpunkte in Blau dargestellt. Die schwarze Linie ist der Umfang. Im Idealfall wird all dies gefüllt, aber es wird viel Speicher verbrauchen und die Zeit, die für die Verarbeitung benötigt wird, wird lächerlich sein.
Dieses Mal habe ich versucht, das Umfangsverhältnis mit der Monte-Carlo-Methode unter Verwendung von Python zu ermitteln. Es ist leicht zu finden, aber ich denke, es gibt einige Nachteile in Bezug auf Genauigkeit und Verarbeitungsgeschwindigkeit. In Wirklichkeit wird es jedoch "Was ist die Monte-Carlo-Methode?" Und "Monte Carlos Ge" sein. Bitte versuchen Sie es einmal. Wenn Sie Kommentare oder Fragen haben, hinterlassen Sie bitte einen Kommentar.