[PYTHON] Informationen zur Genauigkeit der Berechnungsmethode für das Umfangsverhältnis von Archimedes

Einführung

Archimedes erhielt einen ungefähren Wert des Umfangsverhältnisses durch Berechnung der Umfangslänge in der Reihenfolge des regulären Sechsecks, des regulären 12-seitigen, des regulären 24-seitigen, des regulären 48-seitigen und des regulären 96-seitigen Umschreibens des Kreises. tsujimotters Notizbuch "Archimedes und Umfangsverhältnis" Zu diesem Zeitpunkt war der Dezimalpunkt noch nicht erfunden und wurde als Verhältnis von ganzen Zahlen ausgedrückt. Trotz dieser Einschränkungen wollte Archimedes kleiner als 3 und 1/7 und größer als 3 und 10/71 sein. (In Dezimalzahlen zwischen 3.1428571428571429 und 3.1408450704225352) Mit Hilfe der Programmierung habe ich versucht herauszufinden, wie genau das Umfangsverhältnis berechnet werden kann, indem ich mit der Archimedes-Methode fortgefahren bin.

Archimedes-Methode

Die Archimedes-Methode selbst ist im Notizbuch des vorherigen Tujimotter genau beschrieben. Wenn Sie also interessiert sind, schauen Sie bitte dort nach. Hier werden beim Erstellen des Programms nur die erforderlichen Proofs aufgelistet. Unter der Annahme, dass der Umfang des regulären n-seitigen Quadrats L ist und der Radius des umschreibenden Kreises 1 ist, beträgt der Umfang 2π, so dass der ungefähre Wert des Umfangsverhältnisses basierend auf dem regulären n-seitigen Quadrat L / 2 ist. 証明.JPG

[Für reguläres Sechseck]

L=F(0)B×2×6 F (0) B = 1 / √3 * Da ∠F (0) OB 30 ° beträgt (△ OF (0) C ist ein reguläres Dreieck) Der ungefähre Wert des Umfangsverhältnisses basierend auf dem regulären Sechseck ist L ÷ 2 = 1 / √3 × 2 × 6 ÷ 2 = 2 × √3 ≒ 3.464.

[Für normales Zwölfeck]

L=F(1)B×2×12 F(1)B = OB× F(0)B ÷(OB+F(0)O)= F(0)B ÷(1+√(1+F(0)B× F(0)B)) Der ungefähre Wert des Umfangsverhältnisses basierend auf dem regulären Zwölfeck ist L ≤ 2 ≤ F (1) B × 2 × 12 ≤ 2 ≤ 3,215. ** Beweis ** Zeichnen Sie eine gerade Linie durch F (0) parallel zu F (1) O und lassen Sie A den Schnittpunkt mit der Erweiterung von OB sein. Da ΔOBF (1) und ΔABF (0) ähnlich sind, gilt Folgendes. F(1)B:OB = F(0)B:(OB+OA) Da außerdem ΔOF (0) A ein gleichschenkliges Dreieck ist, ist F (0) O = OA F (0) O wird aus √ (OB × OB + F (0) B × F (0) B) unter Verwendung des Satzes von Pitagolas erhalten.

[Für reguläre n-seitige]

In ähnlicher Weise ist der ungefähre Wert des Umfangsverhältnisses basierend auf der regulären n-seitigen Form wie folgt. L÷2=F(n)B×2×n÷2 = F(n-1)B÷(1+√(1+F(n-1)B× F(n-1)B))×n

Implementiert von Python

Das obige Ergebnis wird in Python wie folgt implementiert.

import math
import itertools
def f(n):
  if n == 0: return math.sqrt(3)/3
  return f(n-1)/(1+math.sqrt(1+f(n-1)**2))

N = int(input())
for n in range(N):
  print(f(n)*6*2**n)

Da es jedoch das Mendou ist, das ein reguläres n-seitiges Quadrat genau eingibt, ist der Eingabewert N wie folgt. 0… Berechnen Sie ein reguläres Sechseck 1… Berechnen Sie bis zum regulären Zwölfeck 2… Berechnen Sie bis zu einem regulären 24-Quadrat Gleiches gilt weiter unten. Da der obige Algorithmus eine Berechnungsmenge von O (2 ** n) erfordert, habe ich ihn wie folgt mit DP umgeschrieben. Da es außerdem nicht möglich ist, die Zahlen nach dem Dezimalpunkt in Binärzahlen (*) genau darzustellen, haben wir uns entschlossen, die Zahlen auf 15 Stellen zu beschränken und sie bei der Ausgabe zu formatieren.

import math
import itertools

def pi2s(pi):
  return str(pi)[0] + "." + str(pi)[1:]

def regN(n):
  return format(n, '10d') + ": "

R = 1732050807568877
B = 1000000000000000
pi = "3.14159265358979323846264338327950288"

N = int(input())
F = [0.0 for n in range(N)]
F[0] = B
for n in range(1, N):
  F[n] = F[n-1]*R/(R+math.sqrt(F[n-1]**2+R**2))

for n, v in enumerate(F):
  print(regN(6*2**n) + pi2s(int(v*6*2**n*B/R)))
print(format("pi: ", '>12') + pi[:17])

Es ist das Ergebnis der Berechnung bis zu ** regulären 3145728 Quadrat **. 実行結果.JPG Π wird in der letzten Zeile ausgegeben. Sie können sehen, dass die Werte ziemlich genau sind.

schließlich

Ich habe versucht, die Methode von Archimedes durch Programmierung zu verfolgen. Entgegen meinen eigenen Erwartungen war ich überrascht, dass es schon ziemlich früh (48-seitig) nahe bei 3,14 lag. Für Archimedes, der dies von Hand und anhand des Verhältnisses von ganzen Zahlen (Brüchen) berechnete, nahm er einfach seinen Hut ab.

Recommended Posts

Informationen zur Genauigkeit der Berechnungsmethode für das Umfangsverhältnis von Archimedes
Berechnung der kürzesten Route nach der Monte-Carlo-Methode
Über die Kostenberechnung von MeCab
Über die Komponenten von Luigi
Über die Funktionen von Python
Numerische Approximationsmethode, wenn die Berechnung der Ableitung schwierig ist
Berechnung der Anzahl der Assoziationen von Klamer
Über den Rückgabewert von pthread_mutex_init ()
Über den Rückgabewert des Histogramms.
Über den Grundtyp von Go
Über die Obergrenze von Threads-max
Über das Verhalten von Yield_per von SqlAlchemy
Über die Größe der Punkte in Matplotlib
Informationen zur Grundlagenliste der Python-Grundlagen
Zählen / überprüfen Sie die Anzahl der Methodenaufrufe.
10 Methoden zur Verbesserung der Genauigkeit von BERT
Informationen zum Verhalten von enable_backprop von Chainer v2
Informationen zur virtuellen Umgebung von Python Version 3.7
Denken Sie grob über die Gradientenabstiegsmethode nach
Über die Argumente der Setup-Funktion von PyCaret
Über die Normalgleichung der linearen Regression
Annäherung nach der Methode der kleinsten Quadrate eines Kreises mit zwei festen Punkten
Über das Verhalten von copy, deepcopy und numpy.copy
Informationen zur X-Achsen-Notation des Balkendiagramms von Matplotlib
Über die Verarbeitungsgeschwindigkeit von SVM (SVC) von Scikit-Learn
Schreiben Sie eine Notiz über die Python-Version von Python Virtualenv
Erwägen Sie, die Genauigkeit der Erkennung von VAE-Anomalien zu verbessern
Über die Entwicklungsinhalte des maschinellen Lernens (Beispiel)
[Hinweis] Über die Rolle des Unterstrichs "_" in Python
Informationen zum Verhalten der Warteschlange während der Parallelverarbeitung
[Python] Denken Sie ernsthaft über die M-1-Gewinnmethode nach.
Clustering-Methode Clustering
Über den Test
Über die Warteschlange
Numerische Berechnung von kompressiblem Fluid nach der Methode des endlichen Volumens
Erleben Sie die gute Berechnungseffizienz der Vektorisierung in Python
Ein Memorandum über Warnungen in Pylint-Ausgabeergebnissen
Berechnung der minimal erforderlichen Stimmenzahl aus der Stimmenzahl
Zerstören Sie den Zwischenausdruck der Sweep-Methode mit Python
Denken Sie an das Rack und WSGI der nächsten Generation
Über das Testen bei der Implementierung von Modellen für maschinelles Lernen
Über die Ineffizienz der Datenübertragung im luigi on-memory
Über die übersichtliche Anordnung in der Importreihenfolge von Flake8
[Zusammenfassung von 27 Sprachen] Berechnungsmethode für meine Nummernprüfziffer
Berechnung der Homographiematrix nach der Methode der kleinsten Quadrate (DLT-Methode)
Eine Geschichte über die Änderung des Master-Namens von BlueZ
Persönliche Hinweise zur Integration von vscode und anaconda
Ein Memorandum über die Umsetzung von Empfehlungen in Python
Ich habe die einfachste Methode zur Klassifizierung von Dokumenten mit mehreren Etiketten ausprobiert
Die Kopiermethode von pandas.DataFrame ist standardmäßig Deep Copy