CodeS-SourceS
Rechercher un code, un tuto, une réponse

Approximations de Pi: Formules avec nombres de Fibonacci

Soyez le premier à donner votre avis sur cette source.

Vue 2 226 fois - Téléchargée 191 fois

Description

Bonjour,

Dans la suite de nombres de Fibonacci, chaque terme est la somme des deux termes qui le précèdent.
  F0 = 0; F1 = 1; Fn = F(n-2) + F(n-1)

Ces nombres interviennent dans des formules pour calculer Pi:
  Pi/4 = arctan(1)
  Pi/4 = arctan(1/2) + arctan(1/3)
  Pi/4 = arctan(1/2) + arctan(1/5) + arctan(1/8)
  Pi/4 = arctan(1/2) + arctan(1/5) + arctan(1/13) + arctan(1/21)
  Pi/4 = ...
  Pi/4 = Somme(i>=1) arctan(1/F(2i+1))

  Pi/4 = arctan(1/F2)
  Pi/4 = arctan(1/F3) + arctan(1/F4)
  Pi/4 = arctan(1/F3) + arctan(1/F5) + arctan(1/F6)
  Pi/4 = arctan(1/F3) + arctan(1/F5) + arctan(1/F7) + arctan(1/F8)
  Pi/4 = ...
  Pi/4 = Somme(i>=1) arctan(1/F(2i+1))

Remarque: en italique lorsque l'index est impair.

Cet article fait partie de la série CodeS-SourceS: Approximations de Pi <<< cliquez !.

Comme dans tous les articles de cette série, on se limite à la précision double, utilisons les deux lignes de code:
double fibo[1477]={0,1}; // pour couvrir tout le domaine "double"

for (int k=2; k<=1476; ++k) fibo[k] = fibo[k-2] + fibo[k-1];
pour calculer à l'avance tous les nombres de Fibonacci de ce domaine.
Il faudra se veiller à ne pas dépasser fibo[1476], ce qui est largement le cas ici.

Les premières formules ci-dessus montrent que Pi/4 correspond à la somme des arctan() de l'inverse de quelques nombres de Fibonacci d'index impairs, et de celui d'index pair suivant:
/*
    k  = 0, 1, 2, 3, 4, 5, 6,  7,  8,  9, 10, 11,  12,  13,  14, ...
  F(k) = 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, ...

  n=0          p                          (p: index pair; i: impair)
  n=1             i  p
  n=2             i     i  p
  n=3             i     i      i   p
  n=4             i     i      i       i   p
  n=5             i     i      i       i       i    p
  n=6             i     i      i       i       i         i    p
  ...
*/
double Fibonacci_P(int n) { // calcul précis
  double s=0;
  for (int i=1; i<=n; ++i) s += atan(1/fibo[2*i+1]);
  return 4*(s + atan(1.0/fibo[2*n+2]));
}
Les résultats ne font que confirmer les formules ci-dessus, basées sur la relation:
   arctan(1/F(2n)) = arctan(1/F(2n+1)) + arctan(1/F(2n+2)

La Somme(i>=1) infinie n'est pas à proprement parler une approximation de Pi, puisqu'on obtient un résultat précis avec une somme finie.
De plus, il faudrait aussi calculer l'arctangente à l'aide d'une somme (qui tend vers l'infini).
double Fibonacci_I(int n) { // calcul avec fibo[i]: index impairs
  double s=0;
  for (int i=1; i<=n; ++i) s += atan(1/fibo[2*i+1]);
  return 4*s;
}
On trouve Pi avec une précision double après 36 itérations.

Ce dernier code a peu d'utilité pratique pour calculer Pi, car on connait des combinaisons d'arctan bien plus efficaces que celles présentées ici.
Voir par exemple CodeS-SourceS: Formule de Machin.

Le Zip contient le seul fichier source Fibonacci.cpp dont voici l'Output:
Les premiers nombres de Fibonacci:
 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 ...

Fibonacci_P: pi = précis:
  n=  0: pi=3.14159265358979
  n=  1: pi=3.14159265358979
  n=  2: pi=3.14159265358979
  n=  3: pi=3.14159265358979
  n=  4: pi=3.14159265358979
  n=  5: pi=3.14159265358979
  n=  6: pi=3.14159265358979
  n=  7: pi=3.14159265358979
  n=  8: pi=3.14159265358979
  n=  9: pi=3.14159265358979
  n= 10: pi=3.14159265358979
  n= 11: pi=3.14159265358979
  n= 12: pi=3.14159265358979
  n= 13: pi=3.14159265358979
  n= 14: pi=3.14159265358979
  n= 15: pi=3.14159265358979
  n= 16: pi=3.14159265358979
precis:  pi=3.14159265358979

Fibonacci_I: index impairs seulement:
  n=  2: pi=2.64417267540275
  n=  4: pi=3.06887339329788
  n=  6: pi=3.13098259889778
  n=  8: pi=3.14004466605097
  n= 10: pi=3.14136680524720
  n= 12: pi=3.14155970276067
  n= 14: pi=3.14158784612861
  n= 16: pi=3.14159195219066
  n= 18: pi=3.14159255125704
  n= 20: pi=3.14159263865965
  n= 22: pi=3.14159265141151
  n= 24: pi=3.14159265327199
  n= 26: pi=3.14159265354343
  n= 28: pi=3.14159265358303
  n= 30: pi=3.14159265358881
  n= 32: pi=3.14159265358965
  n= 34: pi=3.14159265358977
  n= 36: pi=3.14159265358979
précis:  pi=3.14159265358979


maths.surrey: Pi and the Fibonacci Numbers
pi314: L'univers de Pi: Fibonacci
 
 
Bonne lecture ...

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Donnez votre avis

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.