Archimède a calculé la circonférence d'un hexagone régulier, un régulier à 12 côtés, un régulier à 24 côtés, un régulier à 48 côtés et un cercle régulier à 96 côtés dans cet ordre pour obtenir une valeur approximative du rapport de circonférence. Cahier de tsujimotter "Archimède et rapport de circonférence" A cette époque, le point décimal n'était pas encore inventé et était exprimé sous forme de rapport d'entiers. Même avec ces restrictions, Archimède voulait être inférieur à 3 et 1/7 et supérieur à 3 et 10/71. (En termes décimaux, entre 3,1428571428571429 et 3,1408450704225352) Avec l'aide de la programmation, j'ai essayé de savoir avec quelle précision le rapport de circonférence pouvait être calculé en utilisant la méthode d'Archimède telle quelle.
La méthode d'Archimède elle-même est décrite avec précision dans le cahier du tujimotter précédent, donc si vous êtes intéressé, veuillez y jeter un œil. Ici, seules les preuves nécessaires sont répertoriées lors de la création du programme. En supposant que la circonférence du carré régulier à n côtés est L et que le rayon du cercle circonscrit est 1, la circonférence est 2π, donc la valeur approximative du rapport de circonférence basé sur le carré régulier à n côtés est L / 2.
L=F(0)B×2×6 F (0) B = 1 / √3 * Puisque ∠F (0) OB vaut 30 ° (△ OF (0) C est un triangle régulier) La valeur approximative du rapport de circonférence basé sur l'hexagone régulier est L ÷ 2 = 1 / √3 × 2 × 6 ÷ 2 = 2 × √3 ≒ 3.464.
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)) La valeur approximative du rapport de circonférence basé sur le dodécagone régulier est L ÷ 2 = F (1) B × 2 × 12 ÷ 2 ≒ 3.215. ** Preuve ** Tracez une droite passant par F (0) parallèle à F (1) O, et soit A l'intersection avec l'extension d'OB. Puisque ΔOBF (1) et ΔABF (0) sont similaires, ce qui suit est vrai. F(1)B:OB = F(0)B:(OB+OA) De plus, puisque ΔOF (0) A est un triangle isocèle, F (0) O = OA F (0) O est obtenu à partir de √ (OB × OB + F (0) B × F (0) B) en utilisant le théorème de Pitagolas.
De même, la valeur approximative du rapport de circonférence sur la base de la forme régulière à n côtés est la suivante. L÷2=F(n)B×2×n÷2 = F(n-1)B÷(1+√(1+F(n-1)B× F(n-1)B))×n
Le résultat ci-dessus est implémenté en Python comme suit.
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)
Cependant, comme c'est le Mendou qui entre avec précision le carré à n côtés régulier, la valeur d'entrée N est la suivante. 0… Calculer un hexagone régulier 1… Calculez jusqu'au dodécagone régulier 2… Calculez jusqu'à 24 carrés réguliers La même chose s'applique ci-dessous. Étant donné que l'algorithme ci-dessus nécessite une quantité de calcul de O (2 ** n), je l'ai réécrit avec DP comme suit. De plus, comme il n'est pas possible de représenter avec précision les nombres après la virgule décimale en nombres binaires (*), nous avons décidé de rendre les nombres aussi grands que 15 chiffres et de les formater lors de la sortie.
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])
C'est le résultat du calcul jusqu'au ** carré régulier 3145728 **. Π est affiché sur la dernière ligne. Vous pouvez voir que les valeurs sont assez précises.
J'ai essayé de retracer la méthode d'Archimède par programmation. Contrairement à mes propres attentes, j'ai été surpris qu'il soit déjà proche de 3,14 à un stade assez précoce (48 faces). Pour Archimède, qui a calculé cela à la main et par le rapport des nombres entiers (fractions), il vient de retirer son chapeau.
Recommended Posts