[PYTHON] Ich habe versucht, das Umfangsverhältnis π probabilistisch abzuschätzen

Es ist eine Geschichte, die ich versucht habe, das Umfangsverhältnis probabilistisch (genau genommen, Monte-Carlo-Methode) unter Verwendung von Pythons Standardbibliothek zufällig zu schätzen. (Voraussichtliche Lesezeit: 4 Minuten)

Denkweise

Stellen Sie sich xy-Koordinaten vor. pi1.png

Zeichnen Sie einen Kreis mit dem Radius r (nennen wir es C), der auf dem Ursprung O zentriert ist, und ein Quadrat mit einer Seite von 2r (nennen wir es S). pi2.png

Schlagen Sie in S weiterhin zufällig auf Punkte. pi3.png

Wenn Sie genug Punkte treffen, um das Innere von S zu füllen, können Sie "die Anzahl der Punkte in S: die Anzahl der Punkte in C ≒ die Fläche von S: die Fläche von C" sagen. pi4.png

Wenn die Anzahl der Punkte in S "s_dot_num" und die Anzahl der Punkte in C "c_dot_num" ist,

(c_dot_num) / (s_dot_num) = Fläche von C / Fläche von S. = (π * r im Quadrat) / (2r) im Quadrat  = π / 4

Weil es wird

π = 4 * (c_dot_num) / (s_dot_num)

Ich konnte definieren. Wenn Sie danach c_dot_num bzw. s_dot_num finden, können Sie den Wert von π schätzen. (Der Wert von r scheint keine Rolle zu spielen)

Code

Diesmal habe ich es in Python geschrieben.

estimate_pi.py


#Punkte werden zufällig in einem Quadrat mit einer Seitenlänge von 1 platziert und das Umfangsverhältnis wird geschätzt.
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('Wenn es 100 Punkte gibt, ist das Umfangsverhältnis{}'.format(estimate_pi(100)))
    print('Bei 1000 Punkten beträgt das Umfangsverhältnis{}'.format(estimate_pi(1000)))
    print('Wenn es 10000 Punkte gibt, ist das Umfangsverhältnis{}'.format(estimate_pi(10000)))
    print('Bei 100.000 Punkten beträgt das Umfangsverhältnis{}'.format(estimate_pi(100000)))

※Bild pi5.png

Ausführungsergebnis

Erstes Mal r1.png Zweites Mal r2.png Drittes Mal r3.png

Es ist ungefähr 3.141. Wenn die Anzahl der Versuche n (= die Häufigkeit, mit der der Punkt getroffen wird) erhöht wird, erhöht sich die Genauigkeit.

Zusammenfassung

Dieses Mal habe ich versucht, das Umfangsverhältnis anhand von Zufallszahlen zu schätzen. Akademisch wird die Methode zur Schätzung eines Wertes unter Verwendung von Zufallszahlen als "Monte-Carlo-Methode" bezeichnet.

Der Code selbst ist überhaupt nicht schwierig, aber als ich zum ersten Mal davon erfuhr, war ich aufgeregt zu sagen: "Gibt es einen solchen Ansatz!", Also zur Erinnerung.

Recommended Posts

Ich habe versucht, das Umfangsverhältnis π probabilistisch abzuschätzen
Ich habe versucht, den Abschnitt zu schätzen.
Ich habe versucht, den Ball zu bewegen
Ich habe versucht, den Befehl umask zusammenzufassen
Ich versuchte das Weckwort zu erkennen
Ich habe versucht, die grafische Modellierung zusammenzufassen.
Ich habe versucht, die COTOHA-API zu berühren
Ich habe Web Scraping versucht, um die Texte zu analysieren.
Ich habe versucht, beim Trocknen der Wäsche zu optimieren
Ich habe versucht, die Daten mit Zwietracht zu speichern
Ich habe versucht, das Umfangsverhältnis mit 100 Millionen Stellen zu ermitteln
Qiita Job Ich habe versucht, den Job zu analysieren
LeetCode Ich habe versucht, die einfachen zusammenzufassen
Ich habe versucht, das Problem des Handlungsreisenden umzusetzen
Ich habe versucht, die Texte von Hinatazaka 46 zu vektorisieren!
Ich habe versucht, die Ähnlichkeit der Frageabsicht mit Doc2Vec von gensim abzuschätzen
(Python) Ich habe versucht, 1 Million Hände zu analysieren ~ Ich habe versucht, die Anzahl der AA ~ zu schätzen
Ich habe versucht, die Sündenfunktion mit Chainer zu trainieren
Ich habe versucht, die in Python installierten Pakete grafisch darzustellen
Ich habe versucht, PredNet zu lernen
Ich habe versucht, Iris aus dem Kamerabild zu erkennen
Ich habe versucht, die Grundform von GPLVM zusammenzufassen
Ich habe versucht, eine CSV-Datei mit Python zu berühren
Ich habe versucht, das Spiel in der J League vorherzusagen (Datenanalyse)
Ich habe versucht, SVM zu organisieren.
Ich habe mit Raspberry Pi gesprochen
Ich habe versucht, PCANet zu implementieren
Ich habe versucht, die Sündenfunktion mit Chainer zu approximieren
Ich habe die Changefinder-Bibliothek ausprobiert!
Ich habe versucht, Pytest in die eigentliche Schlacht zu bringen
[Python] Ich habe versucht, die Top 10 der Lidschatten grafisch darzustellen
Ich habe versucht, Linux wieder einzuführen
Ich habe versucht, die Spacha-Informationen von VTuber zu visualisieren
Ich habe versucht, Pylint vorzustellen
Ich habe versucht, den negativen Teil von Meros zu löschen
Ich habe versucht, das Problem mit Python Vol.1 zu lösen
Ich habe versucht, SparseMatrix zusammenzufassen
Ich habe versucht, die Methode zur Mittelung der Dollarkosten zu simulieren
Ich habe versucht, die nicht negative Matrixfaktorisierung (NMF) zu wiederholen.
jupyter ich habe es berührt
Ich habe versucht, StarGAN (1) zu implementieren.
Ich habe versucht, die Sprache mit CNN + Melspectogram zu identifizieren
Ich habe versucht, das Wissensdiagramm mit OpenKE zu ergänzen
Ich habe versucht, die Stimmen der Sprecher zu klassifizieren
Ich habe versucht, das Bild mithilfe von maschinellem Lernen zu komprimieren
Ich habe versucht, die String-Operationen von Python zusammenzufassen
Als ich versuchte, eine Socket-Kommunikation mit Raspberry Pi durchzuführen, war das Protokoll anders
Ich habe versucht, die Entropie des Bildes mit Python zu finden
Ich habe versucht, die Umrisse von Big Gorilla herauszufinden
Ich habe versucht, das Blockdiagramm-Generierungswerkzeug blockdiag einzuführen
Ich habe versucht, den für TensorFlow geschriebenen Code nach Theano zu portieren
[Pferderennen] Ich habe versucht, die Stärke des Rennpferdes zu quantifizieren
Ich habe versucht zu simulieren, wie sich die Infektion mit Python ausbreitet
Ich habe versucht, die Standortinformationen des Odakyu-Busses zu erhalten
Ich habe versucht, mit TensorFlow den Durchschnitt mehrerer Spalten zu ermitteln
Ich habe versucht, die Zugverspätungsinformationen mit LINE Notify zu benachrichtigen
Ich habe versucht, den in Pandas häufig verwendeten Code zusammenzufassen