| Tendre vers PI | |
|
+4Pedro RMont papydall bignono 8 participants |
Auteur | Message |
---|
bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Tendre vers PI Mar 21 Jan 2014 - 15:13 | |
| Bonjour à tous, En fouillant sur le Net, je suis tombé sur une formule mathématique qui permet de s'approcher de PI. Je sais que Papydall adore les mathématiques, et moi, je suis vraiment nul dedans. Mais j'ai essayé de vérifier ce qui se disait sur cette formule. EX=1-1/3+1/5-1/7+1/9-1/11+1/13...etc... . Où il est dit que EX tend vers PI/4. Il ne m'en a fallu pas plus pour essayer de mettre cette équation en pratique et vérifier ce qui était dit! Avec le petit programme suivant on voit bien que le résultat tend effectivement vers PI, mais certainement jamais sans l'atteindre. - Code:
-
height 0,screen_y-40 memo 1 : height 1,height(0)-38 : bar_vertical 1 : print_target_is 1
dim pi,ex,i,j
ex=1-(1/3)+(1/5) : pi=ex*4 : print pi
for i=7 to 1023 step 4 j=i+2 : ex=ex-(1/i)+(1/j) : pi=ex*4 : print pi next i
A+ | |
|
| |
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Tendre vers PI Mar 21 Jan 2014 - 16:32 | |
| Salut bignono.
Il s’agit du développement en série de Arctg x avec x = 1. C’est dû à Leibnitz et James Gregory La formule est : PI = 4 * (1 - 1/3 + 1/5 - 1/7 + 1/9 .....)
Je vais concocter un petit programme de calcul de PI avec différentes formules.
A+ | |
|
| |
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Tendre vers PI Mar 21 Jan 2014 - 17:07 | |
| Voici 9 SUBs pour approcher PI. - Code:
-
rem ============================================================================ rem Calcul de PI avec différentes formules rem Calcul_PI.bas par Papydall ' ****************************************************************************** rem Voici 9 procédures pour calculer PI rem ============================================================================
pi_Euler() ' Pi_Serie_Arctg() ' Pi_Machin() ' Pi_Wallis() ' Pi_Viete() ' Pi_Brouncker() ' Pi_Monte_Carlo() ' Pi_Salamin_Brent() ' Pi_Bailey_Borwein_Plouffe() end rem ============================================================================ ' Formule de Leonhard Euler (1707-1783) ' PI² = 6 * (1 + 1/2² + 1/3² + 1/4² + 1/5² + ....) rem ============================================================================ SUB Pi_Euler() dim_local s,i,err,epsilon s = 0 : i = 0 : err = 1 : epsilon = 1/power(10,8) caption 0," Je calcule .... Veuillez patienter ...." while not(err < epsilon) i = i + 1 : err = 1/i/i : s = s + err end_while s = sqr(s*6) caption 0, " Calcul de PI par la formule d'Euler avec " + str$(i) + " termes" print " PI = " + str$(s) END_SUB rem ============================================================================ ' Développement en série de Arctg x avec x = 1 ' Leibniz (1646-1716) ou James Gregory (1638-1675) ' PI = 4 * (1 - 1/3 + 1/5 - 1/7 + 1/9 .....) rem ============================================================================ SUB Pi_Serie_Arctg() dim_local s,i,err,signe,epsilon s = 0 : i = -1 : err = 1 : signe = -1 : epsilon = 1/power(10,5) caption 0," Je calcule .... Veuillez patienter ...." while not(err < epsilon) i = i + 2 : err = 1/i : signe = 0-signe : s = s + err * signe end_while caption 0," Calcul de Pi par le développement en série de Arctg x avec x = 1 avec " + str$(int(i/2)) + " termes" print " PI = " + str$(4*s) END_SUB rem ============================================================================ ' C'est extrêmement rapide! ' Formule de John Machin (1685-1751) à partir de Arctg 1/5 - Arctg 1/239 ' PI = 16*(1/5^1 - 1/3*1/5^3 + 1/5*1/5^5 - 1/7*1/5^7 + ....) ' - 4 *(1/239^1) - 1/3*1/239^3 + 1/5*1/239^5 -1/7*1/239^7 + ....) rem ============================================================================ SUB Pi_Machin() dim_local s,i,p,q,err,signe,epsilon s = 0 : i = -1 : p = 16*5 : q = 4*239 : err = 1 : signe = -1 : epsilon = 1/power(10,8) caption 0," Je calcule .... Veuillez patienter ...." while not(abs(err) < epsilon) i = i + 2 : p = p/5/5 : q = q/239/239 : err = (p-q)/i : signe = 0-signe : s = s + err * signe end_while caption 0,"Calcul de Pi par la formule de John Machin avec " + str$(i) + " termes" print " PI = " + str$(s) END_SUB rem ============================================================================ ' Formule de John Wallis (1616-1703) : ' PI = 2 * (2/1 * 2/3 * 4/3 * 4/5 * 6/5 * 6/7 * ....) rem ============================================================================ SUB Pi_Wallis() dim_local s,i,r,err,epsilon s = 1 : i = 0 : err = 1 : epsilon = 1/power(10,8) caption 0," Je calcule .... Veuillez patienter ...." while not(err < epsilon) i = i + 2 : r = (i /(i-1)) * (i /(i+1)) : err = abs(s*r-s) : s = s * r end_while caption 0,"Calcul de PI par la formule de Wallis avec " + str$(int(i/2)) + " termes" print " PI = " + str$(2*s) END_SUB rem ============================================================================ ' C'est extrêmement rapide! ' Formule de François Viète (1540-1603) : ' 2/PI = sqr(1/2) * sqr(1/2 + 1/2 * sqr(1/2)) * .... rem ============================================================================ SUB Pi_Viete() dim_local err,i,r,s,epsilon err = 1 : i = 0 : r = sqr(1/2) : s = r : epsilon = 1/power(10,10) caption 0," Je calcule .... Veuillez patienter ...." while not(err < epsilon) i = i + 1 : r = sqr(r/2 + 1/2) : err = abs(2/s/r - 2/s) : s = s*r end_while caption 0,"calcul de PI par la formule de Viète avec " + str$(i) + " termes" print " PI = " + str$(2/s) END_SUB rem ============================================================================ ' Calcul de PI suivant la conjecture de Brouncker à partir de la ' formule de Wallis. La conjecture de Brouncker a été prouvée par Lambert rem ============================================================================ sub Pi_Brouncker() dim_local n,un,p,nmax nmax = 10000 : un = 2 * nmax + 1 for n = nmax to 1 step -1 un = (2*n+1)*(2*n+1)/(2+un) next n un = 1/(2+un) : p = 4/(1+un) print "pi = " + str$(p) end_sub rem ============================================================================ ' Calcul de PI par la méthode de Monte-carlo ' Traçons un carré de côté 2 unité de longueur. Inscrivons-y un cercle de rayon ' unitaire. La surface du carré est de 4 et celle du cercle est de PI. ' Choisissons au hasard un point du carré. La probabilité qu'il se trouve dans ' le cercle est de PI/4. ' En recommençant de plus en plus souvent le choix aléatoire d'un point du carré, ' le rapport entre le nombre de points se trouvant dans le cercle (dont la distance ' à l'origine est inférieur à 1) et le nombre de points choisis doit s'approcher de PI ' ça depend aussi de l'efficacité du générateur aléatoire. rem ============================================================================ SUB Pi_Monte_Carlo() dim_local Cpt,cptIn,x,y CptIn = 0 : Cpt = 0 While Not(scancode <> 0) x = rnd(1) : y = rnd(1) : Cpt = Cpt + 1 if x*x + y*y < 1 then cptIn = CptIn + 1 caption 0," <CLICK> pour arrêter .........PI = " + str$(4*CptIn/Cpt) End_while END_SUB rem ============================================================================ ' Calcul de PI la formule découverte par Eugène salamin et Richard Brent en 1976 ' Cette formules est basée sur les moyennes arithmétiques et géométrique.
SUB Pi_Salamin_Brent() dim_local S_Carr,Puiss2,a,b,an,bn,U,Un,Eps Eps = 1/power(10,6) : S_Carr = 0 : Puiss2 = 1 : an = 1 : bn = 1/SQR(2) Puiss2 = 1 : U = 1 : Un = 0 caption 0," Je calcule .... Veuillez patienter ...." WHILE NOT (abs(U-Un) < Eps) a = an : b = bn : U = Un : an = (a+b)/2 : bn = SQR(a*b) Puiss2 = Puiss2*2 : S_Carr = S_Carr+Puiss2*(an*an-bn*bn) Un = 4*an*an/(1-2*S_Carr) END_while caption 0,"calcul de PI par la formule de Salamin-Brent" print " PI = " + str$(Un) END_SUB rem ============================================================================ ' En base 16 : ' PI = 3.243F6A8885A308D313198A2E03707344A4093822299F31D0082EFA98EC4E6C89452821
SUB Pi_Bailey_Borwein_Plouffe() dim_local chiffres$ : Chiffres$ = "0123456789ABCDEF" dim_local i,N,s,Chiffre_16 , pi_16$ width 0,1000 N = 0 : S = 4-2/4-1/5-1/6 Chiffre_16 = int(S) Pi_16$ = mid$(chiffres$,1+Chiffre_16,1)+"," FOR i = 1 TO 100 N = N+8 : S = (S-Chiffre_16)*16 S = S+4/(N+1)-2/(N+4)-1/(N+5)-1/(N+6) Chiffre_16 = int(S) Pi_16$ = Pi_16$ + mid$(chiffres$,1+Chiffre_16,1) next i print " PI en base 16 = " + Pi_16$ END_SUB rem ============================================================================
ça peut constituer un bon exercice de codage des quelques algorithmes.
Dernière édition par papydall le Mar 21 Jan 2014 - 17:52, édité 1 fois (Raison : Remarque de Rmont) | |
|
| |
RMont
Nombre de messages : 233 Age : 82 Localisation : charente maritime Date d'inscription : 29/12/2008
| Sujet: Re: Tendre vers PI Mar 21 Jan 2014 - 17:47 | |
| bonjour a tous. étonnant :papydall a fait une faute dans chois au lieu de choix dans calcul de Pi méthode Monte Carlo
| |
|
| |
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Tendre vers PI Mar 21 Jan 2014 - 18:10 | |
| - RMont a écrit:
- étonnant :papydall a fait une faute dans chois au lieu de choix dans calcul de Pi méthode Monte Carlo
Rien d'étonnant : Papydall fait et fera des fautes comme tout le monde. Heureusement, je suis un être humain. Bon c’est corrigé ci-haut, merci RMont. Maintenant, si tu veux bien essayer toi-même de coder l’une ou l’autre SUB en te servant de la formule, ça sera un exercice enrichissant. Ce n’est absolument pas un défi que je te lance mais un exercice. Tu n’as pas à rendre ta copie. Je n’ais pas à te donner une note ! C’est juste pour toi. | |
|
| |
Invité Invité
| Sujet: Re: Tendre vers PI Mar 21 Jan 2014 - 18:37 | |
| Une simple question Papydall, par curiosité: Est-ce qu'il y a des calculs pour définir une table trigonométrique? (heu Papydall ou quelqu'un d'autre). Comme on le fait par exemple pour faire une division. Une méthode quoi!
On apprend à faire des opérations, des racines carrés (et peut-être qu'on apprend plus), mais j'ai jamais eu connaissance de la manière de faire une table comme j'en ai parlé.
Depuis les calculatrices, les tables on ne s'en sert plus, mais bon, je me suis toujours posé cette question. |
|
| |
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Tendre vers PI Mar 21 Jan 2014 - 19:30 | |
| Pour les fonctions trigonométriques, il existe les développements limités pour les calculer. Trigonométrie circulaire SIN X = X – X^3 / 3 ! + X^5 / 5 ! – X^7 / 7 ! + …. Quelque soit X COS X = 1 – X^2 / 2 ! + X^4 / 4 ! – X^6 / 6 ! + ..… Quelque soit X TAN X = X + X^3 / 3 + 2X^5 /15 + 17X^7 /315 + … |X| < pi/2
COTAN X = 1/TAN X = 1/X – X/3 – X^3 / 45 – 2X^5 /945 – X^7 / 4725 … Avec |X| < pi SEC X = 1/COS X = 1 + X^2 /2 + 5X^4 / 24 + 61X^6 / 720 + … Avec |X| < pi/2 COSEC X = 1/SIN X = 1/X + X/6 + 7X^3 /360 + 31X^5 / 15120 + 127X^7 / 604800 + … Avec |X| < pi
Trigonometrie hyperbolique SINH X = X + X^3 / 3 ! + X^5 /5 ! + X^7 / 7 ! + …. Quelque soit X COSH X = 1 + X^2 /2 ! + X^4 / 4 ! + X^6 / 6 ! + …. Quelque soit X TANH X = X – X^3 /3 + 2X^5 / 155 – 17X^7 / 315 + … Avec |X| < pi/2 COTAN X = 1/TANH X = 1/X + X/3 – X^3 / 45 + 2X^5 / 945 – X^7 / 4725 + … Avec |X| < pi
Logarithmes et exponentiielles
ln (1 + X) = X – X^2 / 2 + X^3 / 3 – X^4 /4 + X^5 / 5 - … : Logarithme néperien avec -1 < X <= 1 e^x = 1 + X / 1 ! + X^2 / 2 ! + X^3 / 3 ! + X^4 / 4 ! + …. : Exponentielle x quelque soit x
J'espère que je ne me suis pas trompé dans aucun terme des développements limités !
Dernière édition par papydall le Mer 22 Jan 2014 - 3:15, édité 1 fois | |
|
| |
Invité Invité
| Sujet: Re: Tendre vers PI Mar 21 Jan 2014 - 20:29 | |
| Je te remercie pour ton savoir. Je vois dans tes formules: '!' connais pas la signification. |
|
| |
Pedro
Nombre de messages : 1594 Date d'inscription : 19/01/2014
| Sujet: Calcul de PI. Mar 21 Jan 2014 - 20:42 | |
| Bonsoir.
Le symbole ! signifie factorielle de.
Exemple: 4! = 4*3*2 = 24
Pour résumé:
factorielle de n = n * (n-1) * (n-2) ... * 2 | |
|
| |
Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Tendre vers PI Mar 21 Jan 2014 - 22:36 | |
| | |
|
| |
Invité Invité
| Sujet: Re: Tendre vers PI Mar 21 Jan 2014 - 22:51 | |
| Merci! Amusez-vous bien! Moi je ne sais pas ce que j'en ferais aujourd'hui. J'ia mis une tête de cochon, vous ne le faites jamais. |
|
| |
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Tendre vers PI Mer 22 Jan 2014 - 1:00 | |
| Voici une table de sinus(x) pour x de 0° à 90° sans passer par la fonction sin(x). - Code:
-
rem ============================================================================ rem Table de sinus(x) pour x = 0° à 90° rem Par Papydall rem ============================================================================ dim i height 0,700 : caption 0,"Table de sinus(x) pour x = 0° à 90°" list 10 : height 10,650 : width 10,200 list 20 : height 20,650 : width 20,200 : left 20,300 print_target_is 10 : for i = 0 to 45 : sinus(i) : next i print_target_is 20 : for i = 46 to 90 : sinus(i) : next i end rem ============================================================================ SUB sinus(x) dim_local n,s,pi,xrad pi = acos(-1) : xrad = x*pi/180 : n = 15 : s = 2*xrad / power(3,n) while n > 0 s = s * (3-s*s) n = n - 1 end_while print "sin("+str$(x)+ "°) = " + str$(s/2) END_SUB rem ============================================================================
| |
|
| |
Invité Invité
| Sujet: Re: Tendre vers PI Mer 22 Jan 2014 - 1:18 | |
| |
|
| |
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Tendre vers PI Mer 22 Jan 2014 - 2:52 | |
| Je sais simplement que tout calcul trigonométrique peut se ramener à celui de tangente d'un angle compris en 0 et pi/4 radians. Je sais aussi que les calculatrices utilise l’algorithme trigonométrique CORDIC (COordinate Rotation Digital Computer) pour réaliser le calcul de la tangente à l’aide d’additions et de soustractions opérées sur des registres à décalages. Voici comment on calcule le sinus(x) et le cosinus(x) en fonction de la tangente(x) - Code:
-
rem ============================================================================ rem Calcul de sin(x) et cos(x) en fonction de tan(x) rem ============================================================================ dim pi ,cosinus, sinus pi = acos(-1) cosinus(pi/3) : message cosinus sinus(pi/4) : message sinus end rem ============================================================================ SUB cosinus(x) dim_local cot,epsilon epsilon = power(10,0-10) if x = 0 then x = epsilon cot = 1/tan(x) cosinus = cot/sqr(1+cot*cot) : if cosinus <= epsilon then cosinus = 0 END_SUB rem ============================================================================ SUB sinus(x) dim_local tg,epsilon epsilon = power(10,0-10) if x = 0 then x = epsilon tg = tan(x) sinus = tg/sqr(1+tg*tg) : if sinus <= epsilon then sinus = 0 END_SUB rem ============================================================================
Ma science s’arrête là ! | |
|
| |
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mer 22 Jan 2014 - 8:12 | |
| | |
|
| |
Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Tendre vers PI Mer 22 Jan 2014 - 9:51 | |
| | |
|
| |
Invité Invité
| Sujet: Re: Tendre vers PI Mer 22 Jan 2014 - 10:06 | |
| Merci pour tes efforts Papydall. Il est évident qu'on ne peut tout connaitre. Seulement dans tes calculs, tu te sert de: cot = 1/tan(x) Plus loin aussi tu te sers de l'ordinateur. Est-ce que la table de tangente a été faite par la division de la mesure prise de deux longeurs d'un angle Ce que je voudrais savoir, c'est comment l'ordinateur procède pour le calcul. Est-ce qu'il se sert d'une table. Cela m'étonnerais, les premiers ordi qui avaient les fonctions trigo.. n'avaient pas beaucoup de mémoire. Ah Jean-Claude, tu m'as planté en postant en même temps que moi. Mais j'ai pu récupérer. Non je ne suis pas malade mais je me demande comment fait l'ordinateur pour faire ses calculs. N'interviens pas, je sais que c'est une plaisanterie! Il en faut. |
|
| |
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Tendre vers PI Mer 22 Jan 2014 - 12:03 | |
|
Dernière édition par papydall le Mer 22 Jan 2014 - 12:45, édité 1 fois | |
|
| |
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Tendre vers PI Mer 22 Jan 2014 - 12:14 | |
| Hé Bignono au secours ! Tu as voulu tendre vers PI et tu as pris la tangente ! | |
|
| |
Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Tendre vers PI Mer 22 Jan 2014 - 12:31 | |
| | |
|
| |
Invité Invité
| Sujet: Re: Tendre vers PI Mer 22 Jan 2014 - 14:09 | |
| Merci pour ton intervention Papydall. J'espère que ceux qui fond des calculs d’astronomie ont une bonne valeur des résultats trigonométriques qui rentrent dans ceux-ci. |
|
| |
jean_debord
Nombre de messages : 1266 Age : 70 Localisation : Limoges Date d'inscription : 21/09/2008
| Sujet: Re: Tendre vers PI Mer 22 Jan 2014 - 16:40 | |
| - papydall a écrit:
- Les ordinateurs et les calculatrices n’utilisent ni tables en mémoire ni développements en série pour calculer les fonctions trigonométriques usuelles (Sinus, Cosinus, Tangente) , les fonctions exponentielle, logarithme, etc.
En fait cela dépend des compilateurs et des bibliothèques qu'ils utilisent. Certains utilisent des bibliothèques écrites en C où les fonctions sont calculées avec des développements en série, des fractions continues et autres astuces. D'autre part, les microprocesseurs récents intègrent un coprocesseur mathématique qui a toutes ces fonctions dans son jeu d'instruction. On peut y accéder directement par des routines en assembleur. | |
|
| |
Invité Invité
| Sujet: Re: Tendre vers PI Mer 22 Jan 2014 - 18:08 | |
| - Citation :
- C'est des malades
- Citation :
- Tu as voulu tendre vers PI et tu as pris la tangente !
Bon, humour qui n'est plus de mon âge : je crois que je vais aller faire PI PI (j'ai honte) |
|
| |
papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Tendre vers PI Mer 22 Jan 2014 - 18:56 | |
| Hé cosmos 70, il n’y a pas d’âge pour faire de l’humour, à moins que là-haut dans le cosmos c’est autre chose !
PI PI veut dire pi au carré. Comme pi vaut 3.14159265358979, alors pi pi doit valoir 9.86960440108934 : ça ne fait même pas 10 et il n’y a pas à avoir honte pour ... moins de 10! | |
|
| |
Contenu sponsorisé
| Sujet: Re: Tendre vers PI | |
| |
|
| |
| Tendre vers PI | |
|