pathology
Se connecter avec
S'enregistrer | Connectez-vous
Votre question
Résolu

Maths: Calcul de Pi par la formule de Leibniz

Tags :
  • Script
Dernière réponse : dans Etudes - Travail
Partagez
4 Mars 2011 22:12:43

Bonjour,

D'abord, je précise que je ne suis pas étudiant, et que donc ce n'est pas "urgent". ;) 
En fait, c'est parce que ça fait un petit moment que j'ai arrêté les études que je pose la question qui va suivre. :) 

Bref, j'ai tenté de faire un calcul approché de Pi par la formule de Leibniz : Pi / 4 = Somme[i de 0 à infini]( (-1)^i / (2i+1) ) = 1 - 1/3 + 1/5 - 1/7 + 1/9...

Comme je fais un calcul approché, j'utilise évidemment un nombre fini d'éléments. J'ai remarqué qu'avec 10000 termes, 1 seul chiffre (en base 10) au milieu était différent (voir le premier résultat plus bas).
Du coup, j'ai remarqué que pour n termes, j'obtenais une bien meilleure approximation si j'ajoutais (-1)^n / n à 4 * Somme[i de 0 à n]( (-1)^i / (2i+1) )

Voici un exemple de script python illustrant le problème:
  1. import math
  2.  
  3. #Calcul approché de Pi par la formule de Leibniz classique
  4. def p(n):
  5. r=0
  6. for i in range(0,n):
  7. r += (-1)**i / (2*i+1)
  8. return r
  9.  
  10. #Calcul avec la correction
  11. def corPi(n):
  12. return p(n)*4 + (-1)**n / n
  13.  
  14. #Affichage de résultats
  15. print('classic: ', p(10000)*4, '\ncorrected:', corPi(10000), '\nsystem: ', math.pi)
  16. print('classic: ', p(300)*4, '\ncorrected:', corPi(300), '\nsystem: ', math.pi)
  17. print('classic: ', p(321)*4, '\ncorrected:', corPi(321), '\nsystem: ', math.pi)


Voici les résultats pour n=10000:
classic=== 3.14149265359
corrected= 3.14159265359
system==== 3.14159265359
=> 3.14149265359

Voici les résultats pour n=100:
classic=== 3.13159290356
corrected= 3.14159290356
system==== 3.14159265359
=> 3.131592

Voici les résultats pour n=321:
classic=== 3.14470791083
corrected= 3.14159264603
system==== 3.14159265359
=> 3.1447079

Du coup, j'ai pensé que 4 * Somme[i de n à infini]( (-1)^i / (2i+1) ) tendait vers (-1)^n / n, mais ce n'est évidemment pas un calcul approché qui va prouver quoi que ce soit.

Alors, quelqu'un aurait-il une idée pour résoudre ce problème ?
Ce n'est peut-être qu'une question de bornage.

Pour info un script pour vérifier ceci:
  1. def pr(n,m):
  2. r=0
  3. for i in range(n,m):
  4. r+=(-1)**i / (2*i+1)
  5. return r

Donne en résultat:
pr(100, 10000000)*4 = 0.0099897500312405452
1/100 = 0.01

-pr(321, 10000000)*4 = 0.0031153572392856399
1/321 ================ 0.0031152647975077881


De toutes façons, même avec cette correction, ce n'est probablement pas la meilleure méthode pour calculer pour calculer Pi.

Autres pages sur : maths calcul formule leibniz

Meilleure solution

5 Mars 2011 11:23:22

Salut

En gros, tu veux montrer que abs(somme(i=n,oo,(-1)^i/(2i+1))) est équivalente à 1/n

Déjà, on peut montrer très simplement que abs(somme(i=n,oo,(-1)^i/(2i+1)))<1/(2n+1) grâce au critère des séries alternées ( http://fr.wikipedia.org/wiki/Crit%C3%A8re_de_convergenc... ), et que donc on peut déjà dire que n*"la somme" tend vers une constante positive inférieure à 1/2, et il reste à montrer que cette constante est 1/4...pour l'instant pas d'idée :(  (jsuis un peu rouillé en maths...ça commence à faire longtemps que j'en fais plus)...

La formule de Leibnitz converge en 1/n...donc c'est mou...il y a la formule de Ramanujan qui dépote pour calculer Pi
http://villemin.gerard.free.fr/Wwwgvmm/Geometri/PiCalcu...

PS : Je pense que montrer que la limite est 1/4 est trivial pour un prof de math, c'est un exo typique de prépa (il y a 4 ans j'aurais peut être pu t'en dire plus...mais là...


EDIT : En fait on peut démontrer que la limite est 1/4 en utilisant un bon vieux résultat sur les séries : si le terme général qu'on somme est équivalent à 1/n^a (a>1) alors le reste d'ordre N est équivalent à 1/((a-1)*n^(a-1)) :
Ici, il suffit de regrouper les termes 2 par 2 pour montrer que le reste d'ordre 2N (R(2N)) est une série de terme général 2/((4n+1)(4n+3)) (qui démarre à 2N) qui est équivalente à 1/(8n²) et donc R(2N) est équivalent à 1/(8N) donc R(N) est équivalent à 1/(4N).
Bref ça démontre ton intuition ;) 
partage
5 Mars 2011 16:47:41

Salut,

Merci pour ta réponse. en fait, je pensais que tu allais être le seul à me répondre. ;) 
En plus ça tombe bien, c'est un problème associé au théorème d'Abel pour le calcul de arctan(1)=Pi/4. ;) 

Effectivement en regroupant par 2 ça marche bien. :) 
Somme( (-1)^i / (2i+1) ) =
Somme( (-1)^(2i) / (2(2i)+1) ) + (-1)^(2i+1) / (2(2i+1)+1) ) =
Somme( 1 / (4i+1) - 1 / (4i+3) ) =
Somme( 4 / ( (4i+1)(4i+3) ) )
et donc 4 / ( (4i+1)(4i+3) ) < 1 / (4i²)
Donc le reste est équivalent à 1 / (4n)

m
0
l
Contenus similaires
5 Mars 2011 16:47:49

Meilleure réponse sélectionnée par CRicky.
m
0
l
6 Mars 2011 11:24:36

Citation :
[...]pour le calcul de arctan(1)=Pi/4[...]


Je ne l'avais pas vu sous l'angle des séries entières : on arrive aussi à démontrer que la série fait Pi/4 en développant en série de Fourier une fonction créneau paire 2Pi-periodique d'amplitudes -1 et +1 (l'habitude de faire de l'élec fait que je le connais par coeur celui là):

Sn(x)=4/Pi*somme(i=0,+oo, (-1)^i/(2i+1)*cos((2i+1)*x))...et on exploite le fait que Sn(0)=1

Je ne sais pas si cette propriété sera utile pour ton boulot...
m
0
l
6 Mars 2011 12:13:26

En fait, ce n'est pas pour le boulot (en plus je ne fais pas de traitement du signal), je cherchais juste un exemple bidon pour me lancer sur CUDA (faire du calcul parallèle avec le GPU plus rapidement qu'avec le CPU).
Comme c'est plus adapté pour le calcul matriciel, je vais peut-être effectivement voir du côté des séries de Fourier. ;) 
m
0
l
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS