Versuchen Sie, die Monte-Carlo-Methode in Python zu implementieren

Einführung

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 ist die Monte-Carlo-Methode?

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.

So ermitteln Sie das Umfangsverhältnis nach der Monte-Carlo-Methode

Angenommen, Sie haben so etwas wie die folgende Abbildung. 4.png 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 ) und die Anzahl der Punkte ( p $) innerhalb des Umfangs. Dann gilt die folgende Formel aus der Monte-Carlo-Methode.

\frac{r^2\pi}{4S}=\frac{p}{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.

\pi=\frac{4Sp}{nr^2}

Natürlich ist die Wahrscheinlichkeit nicht absolut, daher finden wir nur einen ungefähren Wert.

In Python implementiert

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.

Ergebnis

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) 2.png 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.

Zusammenfassung

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.

Recommended Posts

Versuchen Sie, die Monte-Carlo-Methode in Python zu implementieren
Simulieren Sie die Monte-Carlo-Methode in Python
Lassen Sie uns Yuma in Python 3 implementieren
Versuchen Sie es mit der Wunderlist-API in Python
Versuchen Sie, die Kraken-API mit Python zu verwenden
#Monte Carlo-Methode zum Ermitteln des Umfangsverhältnisses mit Python
Versuchen Sie, zwei Stapel in Python auf einem Array zu implementieren
Lernen Sie das Entwurfsmuster "Vorlagenmethode" in Python
Versuchen Sie es mit der BitFlyer Ligntning API in Python
Ich habe die Methode der kleinsten Quadrate in Python ausprobiert
Dynamisches Ersetzen der nächsten Methode in Python
Lernen Sie das Entwurfsmuster "Factory Method" in Python
Simplex-Methode (Einzelmethode) in Python
Versuchen Sie gRPC in Python
Private Methode in Python
Probieren Sie 9 Slices in Python aus
Versuchen Sie, die DropBox Core-API mit Python zu verwenden
Bestimmen Sie den Schwellenwert mithilfe der P-Tile-Methode in Python
Versuchen Sie, assoziativen Speicher durch Hop-Field-Netzwerk in Python zu implementieren
Einführung in die Monte-Carlo-Methode
Finde Fehler in Python
Das Unterdrücken von Methodenüberschreibungen in Python
Versuchen Sie, COVID-19 Tokyo-Daten mit Python zu kratzen
Erhöhen Sie die Geschwindigkeit der Monte-Carlo-Methode zur Implementierung von Cython-Ausschnitten.
Mit Reiskörnern bestreuen, um das Umfangsverhältnis zu ermitteln (Monte-Carlo-Methode)
Verwendung der Methode __call__ in der Python-Klasse
Finden Sie das Umfangsverhältnis mit einer dreizeiligen Funktion [Python / Monte-Carlo-Methode]
Verstehen Sie die Metropolitan Hasting-Methode (eine der Methoden in der Markov-Ketten-Monte-Carlo-Methode) mit der Implementierung
Versuchen Sie, Yuma in der Sprache Go zu implementieren
Abrufen der arXiv-API in Python
Python im Browser: Brythons Empfehlung
Speichern Sie die Binärdatei in Python
Klicken Sie in Python auf die Sesami-API
Probieren Sie das Python LINE Pay SDK aus
Holen Sie sich den Desktop-Pfad in Python
Versuchen Sie es mit LevelDB mit Python (plyvel)
Holen Sie sich den Skriptpfad in Python
Versuchen wir es mit Fizz Buzz mit Python
Im Python-Befehl zeigt Python auf Python3.8
Implementieren Sie das Singleton-Muster in Python
Versuchen Sie, Trace in Python zu berechnen
Versuchen Sie den Zugriff auf das SPS-Register in Python
Implementierte Methode zur Weitergabe von Etiketten in Python
Schätzung von π nach der Monte-Carlo-Methode
Klicken Sie auf die Web-API in Python
Hash-Methode (Open-Address-Methode) in Python
Ich habe die Warteschlange in Python geschrieben
Berechnen Sie den Vormonat in Python
Untersuchen Sie die Klasse eines Objekts mit Python
Holen Sie sich den Desktop-Pfad in Python
Probieren Sie Cython in kürzester Zeit aus
Greifen Sie mit Python auf die Twitter-API zu
Versuchen Sie es mit LeapMotion mit Python
Der erste Schritt von Python Matplotlib
Ich habe den Stack in Python geschrieben
Beherrsche das schwache Ref-Modul in Python