Inspiriert von diesem Video von Infinite Series .
Einführung
Pi ist definiert als das Verhältnis des Umfangs zum Durchmesser eines Kreises. Aber wie ist ein Kreis definiert? Normalerweise wird ein Kreis als die Punkte mit konstantem Abstand zum Mittelpunkt definiert (nehmen wir an, dass sich der Mittelpunkt in befindet (0,0)
). Die nächste Frage wäre: Wie definieren wir den Abstand ? Im Folgenden betrachten wir unterschiedliche Vorstellungen von Entfernungen (induziert durch die Lp
-Norms):
Wenn eine Norm (= etwas, das eine Länge misst ) gegeben ist, können wir leicht einen Abstand (= Abstand zwischen zwei Punkten) wie folgt konstruieren :
dist(A,B) := norm (A-B)
Die euklidische Norm ist gegeben durch:
norm((x,y)) = (x^2 + y^2)^(1/2)
Dies wird auch als L2-Norm bezeichnet . Die anderen Lp-Normen werden konstruiert, indem die 2
in der obigen Formel angegebenen Werte durch andere Werte zwischen 1 und unendlich ersetzt werden:
norm_p((x,y)) = (|x|^p + |y|^p)^(1/p)
Die Einheitskreise für diese verschiedenen Normen haben ganz unterschiedliche Formen:
Herausforderung
Bei einer gegebene p >= 1
, berechnet das Verhältnis von Umfang zu Durchmesser eines Lp-Kreises in Bezug auf die Lp
-Norm mit einer Genauigkeit von vier signifikanten Ziffern.
Testfälle
Das können wir verwenden für p,q
mit 1 = 1/p + 1/q
uns das gleiche Verhältnis für das bekommen , Lp
sowie die Lq
Norm. Außerdem ist p = q = 2
das Verhältnis minimal, und p = 1, q = infinity
wir erhalten ein Verhältnis von 4, so dass die Verhältnisse immer zwischen pi
und liegen 4
.
p or q ratio
1 infinity 4
2 2 3.141592
1.623 2.60513 3.200
1.5 3 3.25976
4 1.33333 3.39693
A = πr²
) nicht gilt fürp ≠ 2
Antworten:
Python + scipy, 92 Bytes
Formel ist aus dieser math.SE-Frage .
quelle
x=1
Wie funktioniert Ihre Übermittlung?MATL , 31 Bytes
Probieren Sie es online! Oder überprüfen Sie alle Testfälle .
Erläuterung
Dies erzeugt die x , y- Koordinaten eines Viertels des Einheitskreises, der an 1001 Punkten mit Schritt 0,001 in x abgetastet wurde . Die Länge des Kreisviertels wird durch die Länge der Polygonlinie angenähert, die durch diese Punkte verläuft. das ist die Summe der Längen der 1000 Segmente. Die Länge wird natürlich nach
p
-norm berechnet . Wenn Sie das Ergebnis mit 2 multiplizieren, erhalten Sie die ungefähre Länge eines halben Kreises, d. H. Pi.quelle
Mathematica,
4946 Bytes3 Bytes aufgrund von Alephalpha gespeichert .
Anonyme Funktion. Nimmt eine Zahl als Eingabe und gibt eine Zahl als Ausgabe zurück.
quelle
2NIntegrate[(1+(a^-#-1)^(1-#))^(1/#),{a,0,1}]&
PARI / GP,
4843 BytesEs ist einfach, nachdem @orlp die Formel gefunden hat, und in der @ alephalpha-Version werden 5 Bytes gespeichert:
Um etwas Nützliches hinzuzufügen, berechnen
p
wir den Wert, für den wir erhalten3.2
:Richtige Benutzung
Während der Code Ergebnisse liefert, die viel genauer sind als die Herausforderungsanforderungen, kann er leicht erheblich verbessert werden: Wenn wir die obere Integrationsgrenze
1
durch[1,1/p-1]
(im Handbuch als Singularitätsexponent bezeichnet) ersetzen,f(2)
stimmen alle angezeigten Ziffern übereinPi
. Dies gilt auch dann, wenn wir die Genauigkeit auf 100 (Typ\p100
) erhöhen .Nach dieser Änderung
solve
funktionierte die Berechnung jedoch nicht mehr. Ich habe den inneren Begriff geändert, um den Fall explizit zu behandeln,u=0
und habe auch auf einen anderen Computer mit einer neueren PARI-Version und 64-Bit gewechselt (was eine höhere Standardgenauigkeit impliziert).Hier ist die verbesserte Berechnung des
p
Wertes fürPi=3.2
, und schauen wir uns auch den realen Pi an:quelle
p->2*intnum(u=0,1,(1+(u^-p-1)^(1-p))^(1/p))
JavaScript (ES7), 80 Byte
Basierend auf der Antwort von orlp . Diese JS-Implementierung ist ziemlich langsam. Möglicherweise möchten Sie versuchen
i=1e-7
(oder sogar höher), eine schnellere Annäherung zu erreichen.Hinweis : Dies ist grundsätzlich nur für Chrome und Edge vorgesehen. Eine vergleichbare ES6-Version unter
Math.pow()
Firefox 50.1 scheint viel langsamer zu sein.Edit : Laut Neil sollte dies auch in Firefox 52 funktionieren.
quelle