Der 14. März ist der Tag des Umfangsverhältnisses. Die Geschichte der Berechnung des Umfangsverhältnisses mit Python

Überblick

Am 14. März sind Convenience-Stores und Kaufhäuser mit Süßigkeitenverkäufen überfüllt, und ich denke, viele Menschen sind beeindruckt, dass der Frühling näher rückt. Die Menschen auf der Welt ziehen auch am Tag des Umfangsverhältnisses Aufmerksamkeit auf sich, und ich denke, dass es erhebliche wirtschaftliche Auswirkungen gibt. Also werde ich heute ein Programm schreiben, um das Umfangsverhältnis zu berechnen.

Es ist eine einfache Geschichte.

Der Algorithmus von Gauss Legendre

[Gauß-Legendor-Algorithmus] von Wikipedia (https://ja.wikipedia.org/wiki/%E3%82%AC%E3%82%A6%E3%82%B9%EF%BC%9D%E3%83] % AB% E3% 82% B8% E3% 83% A3% E3% 83% B3% E3% 83% 89% E3% 83% AB% E3% 81% AE% E3% 82% A2% E3% 83% AB Laut% E3% 82% B4% E3% 83% AA% E3% 82% BA% E3% 83% A0) ist die Implementierung relativ einfach.

Ich fand es ein großes Genie, so zu denken.

Python-Implementierung

Ich weiß jedoch nicht, wie ich das Umfangsverhältnis berechnen soll, also habe ich mir die Quellen verschiedener Personen angesehen und es wurde abgeschlossen. Als Merkmal wurde Dezimal verwendet, um eine große Anzahl von Ziffern darzustellen.

# -*- coding:utf-8 -*-
import math
import time
from decimal import *

import numpy as np


#Anzahl der Zeichen 1002
PI_1000 = "3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989"


def get_pi(prec=1000, verbose=False):
    '''
Gibt das Umfangsverhältnis von prec mit der Anzahl der Nachkommastellen als Zeichenfolge zurück
    '''
    prec = prec+1+1 #Richtigkeit"3."Da es einen Teil von gibt, erhöhen Sie die Genauigkeit um eins. Wenn Sie keine andere Ziffer haben, kann sich diese aufgrund der Rundheit verschieben. Fügen Sie also eine weitere hinzu
    N = 2*math.ceil(math.log2(prec)) #Anzahl der Wiederholungen Laut Wikipedia log2(prec)Es scheint, dass der Abschluss ausreicht, also verdoppeln Sie ihn für alle Fälle

    getcontext().prec = prec 

    a = Decimal(1.0)
    b = Decimal(1.0) / Decimal(2.0).sqrt()
    t = Decimal(0.25)
    p = Decimal(1.0)


    start_time = time.clock() 

    #Starten Sie N Versuche
    for _ in range(1, N):
        a_next = (a + b)/Decimal(2)
        b_next = (a*b).sqrt()
        t_next = t - p * (a - a_next)**2
        p_next = Decimal(2)*p

        a = a_next
        b = b_next
        t = t_next
        p = p_next

    #Berechnen Sie das Umfangsverhältnis
    pi = (a + b)**2 / (Decimal(4)*t)
    #Berechnen Sie die Ausführungszeit
    elapsed = time.clock()  - start_time

    #Zeigen Sie das Ausführungsergebnis an
    if verbose:
        print("Richtigkeit:",prec)
        print("Pi:", pi)
        print("Ausführungszeit:%f" % (elapsed))

    return str(pi)[0:prec]

Ich habe es wie folgt ausgeführt und bestätigt, dass ungefähr 1000 Ziffern korrekt sind. (Einige Leute berechnen ungefähr 200 Millionen Ziffern, aber das ist in Ordnung.)

pi = get_pi(prec=1000, verbose=True)
print(pi)
#print(PI_1000)
#print(pi == PI_1000)
Genauigkeit: 1002
Pi: 3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230664709384460955058223172535940812848111745028410
270193852110555964462294895493038196442881097566593344612847564823378678316527120190914564856692346034861045432664821339360726024914127372458700660631558817488152092096282925
409171536436789259036001133053054882046652138414695194151160943305727036575959195309218611738193261179310511854807446237996274956735188575272489122793818301194912983367336244
065664308602139494639522473719070217986094370277053921717629317675238467481846766940513200056812714526356082778577134275778960917363717872146844090122495343014654958537105079
227968925892354201995611212902196086403441815981362977477130996051870721134999999837297804995105973173281609631859502445945534690830264252230825334468503526193118817101000313
783875288658753320838142061717766914730359825349042875546873115956286388235378759375195778185778053217122680661300192787661119590921642019890
Ausführungszeit:0.014581

Statistiken

[Einführung in die Statistik](https://www.amazon.co.jp/ Einführung in die Statistik-Abteilung Statistik-Statistik, Fakultät für Geisteswissenschaften, Universität Tokio / dp / 4130420658), Darstellung von Zahlen im Umfangsverhältnis Es gab ein Problem beim Überprüfen der Rate, also habe ich versucht, es zu lösen.

Nachdem wir uns das Diagramm angesehen haben, führen wir auch einen Chi-Quadrat-Test durch, um festzustellen, ob die Zahlen konstant sind.

Wenn 100 Zahlen von der 123. Ziffer übernommen werden

Die 123. Ziffer ist angemessen.

start = 123
pi_123 = pi[2+start:2+start+100]

freq = np.zeros(10, dtype=np.int)
for a in pi_123:
    freq[int(a)] += 1
print("freq(100)=",freq)

#Fragen Sie mit chisquare
print(chisquare(freq, 10*np.ones(10,dtype=np.int8)))

plt.xlim(-0.5, 9.5)
plt.bar(np.array([0,1,2,3,4,5,6,7,8,9]), freq, align='center')

Wenn man sich das Diagramm ansieht, fühlt es sich unangenehm an, aber da der p-Wert etwa 0,37 beträgt, gibt es keinen Widerspruch, selbst wenn die Erscheinungsrate nahezu konstant ist.

freq(100)= [ 9 12 11  7 15 13  7  4 12 10]
Power_divergenceResult(statistic=9.8000000000000007, pvalue=0.3669177991127523)

freq_100.png

Zum Zeitpunkt von 1000 Stellen

freq = np.zeros(10, dtype=np.int)
for a in pi:
    if a != ".":
        freq[int(a)] += 1
print("freq(1001)=",freq)
print(chisquare(freq, 100.1*np.ones(10,dtype=np.int8)))

plt.xlim(-0.5, 9.5)
plt.bar(np.array([0,1,2,3,4,5,6,7,8,9]), freq, align='center')

Wenn etwa 1000 Daten erfasst werden, besteht kein Widerspruch, auch wenn die Erscheinungsrate unabhängig von der Anzahl als konstant angesehen wird. Der p-Wert beträgt 0,85, was gut ist.

freq(1001)= [ 93 116 103 103  93  97  94  95 101 106]
Power_divergenceResult(statistic=4.7842157842157853, pvalue=0.85269838594638103)

freq_1000.png

Besorgt sein

Eigentlich wollte ich die statistischen Informationen der Zahlenfolge wissen, aber das ist die nächste. Ich muss transzendentale Zahlen studieren.

Recommended Posts

Der 14. März ist der Tag des Umfangsverhältnisses. Die Geschichte der Berechnung des Umfangsverhältnisses mit Python
Die Geschichte der Implementierung des Themas Facebook Messenger Bot mit Python
Die Geschichte eines Rubinisten, der mit Python :: Dict-Daten mit Pycall kämpft
Die Geschichte von Python und die Geschichte von NaN
Die Geschichte, einen Standardtreiber für db mit Python zu erstellen.
Die Geschichte, ein Modul zu erstellen, das E-Mails mit Python überspringt
Überprüfen Sie die Existenz der Datei mit Python
Die Geschichte der Manipulation globaler Python-Variablen
[Python] [Meta] Ist der Python-Typ ein Typ?
Die Geschichte der Verarbeitung A von Blackjack (Python)
Die Geschichte, wie man mit Python einen 100-Yen-Frühstücks-Bot für die Universität macht
[Einführung in Python] Wie wird mit der continue-Anweisung wiederholt?
Die Geschichte des tiefen Lernens mit TPU
Die Geschichte, dass die Lernkosten von Python niedrig sind
Bereiten Sie die Ausführungsumgebung von Python3 mit Docker vor
2016 Todai Mathematik mit Python gelöst
[Hinweis] Exportieren Sie das HTML der Site mit Python.
Die Antwort von "1/2" unterscheidet sich zwischen Python2 und 3
Berechnen Sie die Gesamtzahl der Kombinationen mit Python
Überprüfen Sie das Datum der Flaggenpflicht mit Python
Bildverarbeitung? Die Geschichte, Python für zu starten
Dies ist die einzige grundlegende Überprüfung von Python ~ 1 ~
Dies ist die einzige grundlegende Überprüfung von Python ~ 2 ~
Holen Sie sich CPU-Informationen von Raspberry Pi mit Python
Die Geschichte des Lesens von HSPICE-Daten in Python
Finden Sie den Tag nach Datum / Uhrzeit heraus
Dies ist die einzige grundlegende Überprüfung von Python ~ 3 ~
Konvertieren Sie den Zeichencode der Datei mit Python3
Ein Liner, der mit Python ein Umfangsverhältnis von 10000 Stellen ausgibt
[Python] Holen Sie sich den Tag (Englisch & Japanisch)
[Python] Bestimmen Sie den Typ der Iris mit SVM
Messen Sie die CPU-Temperatur von Raspeye mit Python
Benachrichtigen Sie regelmäßig den Verarbeitungsstatus von Raspberry Pi mit Python → Google Spreadsheet → LINE
Hinweis: So erhalten Sie den letzten Tag des Monats mit Python (hinzugefügt am ersten Tag des Monats)
Eine Geschichte über die Berechnung der Geschwindigkeit eines kleinen Balls, der mit Python und Sympy beim Luftwiderstand fällt
Ich bin ein Amateur am 14. Tag von Python, aber ich möchte maschinelles Lernen mit Scicit-Learn ausprobieren
Extrahieren Sie die Tabelle der Bilddateien mit OneDrive & Python
[Python Data Frame] Wenn der Wert leer ist, füllen Sie ihn mit dem Wert einer anderen Spalte.
Die Geschichte von Python ohne Inkrement- und Dekrementoperatoren.
Die Geschichte des Stoppens des Produktionsdienstes mit dem Befehl hostname
Lerne Nim mit Python (ab Anfang des Jahres).
Die Geschichte des Teilens der Pyenv-Umgebung mit mehreren Benutzern
Zerstören Sie den Zwischenausdruck der Sweep-Methode mit Python
der Zen von Python
Visualisieren Sie den Bereich der internen und externen Einfügungen mit Python
Die Geschichte von FileNotFound im Python open () -Modus = 'w'
Berechnen Sie den Regressionskoeffizienten der einfachen Regressionsanalyse mit Python
Nehmen Sie den Wert des SwitchBot-Thermo-Hygrometers mit Raspberry Pi
Zweite Hälfte des ersten Tages des Python-Studiums Versuchen Sie, die Twitter-API mit Bottle zu erreichen
Die Geschichte von sys.path.append ()
Umschalten der Bot-Thermo-Hygrometer-Werte mit Raspberry Pi
Das 14. Referenzproblem beim Offline-Schreiben in Echtzeit mit Python
Zusammenfassung des grundlegenden Ablaufs des maschinellen Lernens mit Python
Zip 4 Gbyte Problem ist eine Geschichte der Vergangenheit
Holen Sie sich mit Python den Betriebsstatus von JR West
Warum ist das erste Argument der [Python] -Klasse selbst?
Die Geschichte der automatischen Sprachkonvertierung von TypeScript / JavaScript / Python