next up previous contents index
suivant: La transformation d'Euler pour monter: Un exemple d'accélération de précédent: Un exercice   Table des matières   Index

Le programme

On peut écrire un programme qui va demander le nombre p d'accélérations.
Si uk(p) désigne le k-ième terme de la série accélérée p fois, on a :
$\displaystyle \sum_{{k=0}}^{\infty}$(- 1)k/(k + 1) = $\displaystyle \sum_{{k=0}}^{p}$$\displaystyle {\frac{{u_0^{(k-1)}}}{{2}}}$ + $\displaystyle \sum_{{k=0}}^{\infty}$uk(p)
avec
uk(p) = $\displaystyle {\frac{{(-1)^k p!}}{{2^p(k+1)...(k+p+1)}}}$
On choisit de multiplier seulement à la fin par $\displaystyle {\frac{{p!}}{{2^p}}}$ et de ne calculer que la somme des n premiers termes :

$\displaystyle \sum_{{k=0}}^{n}$$\displaystyle {\frac{{(-1)^k}}{{(k+1)...(k+p+1)}}}$

On met cette somme dans la variable sg, pour cela on calcule $\displaystyle {\frac{{(-1)^k}}{{(k+1)...(k+p+1)}}}$ que l'on met dans la variable gk :
au début sg=0 et gk= $\displaystyle {\frac{{1}}{{(p+1)!}}}$ (c'est la valeur pour k = 0)
puis, on ajoute gk à la somme sg, ensuite on calcule $\displaystyle {\frac{{(-1)^11!}}{{(p+2)!}}}$ que l'on met dans gk (c'est la valeur pour k = 1) etc...
La variable sf sert au début à calculer $\displaystyle \sum_{{k=0}}^{n}$(- 1)k/(k + 1) puis,
sf sert à calculer la somme à rajouter $\displaystyle \sum_{{k=0}}^{p}$$\displaystyle {\frac{{u_0^{(k-1)}}}{{2}}}$ (qui vaut 1/2 + 1/8 + 1/24 pour p = 3 accélerations).
Dans le programme, on utilise la variable fact pour calculer (p+1)! et la variable fact2 pour calculer $ \tt p!/2^p$.
On écrit :
seriealt_sumacc(n,acc):={
local l,j,k,ls,sf,sg,gk,fact,fact2,alt,t0,p;
//calcul sans acceleration
sf:=0.0;
alt:=1;
for (k:=n;k>=0;k--) {
sf:=sf+alt/(k+1);
alt:=-alt;
}
if (alt==1) {
ls:=[-sf];} 
else {
ls:=[sf];
}
t0:=0.5;
// sf maintenant est la somme a rajouter
sf:=0.0;
fact:=1;fact2:=1;
for (p:=1;p<=acc;p++){
  sf:=sf+fact2*t0;
  //calcul de p+1! et de p!/2^p
  fact:=fact*(p+1);
  fact2:=fact2*p/2;
//sg, somme(de k=0 a n) de la serie gk acceleree p fois
  sg:=0.0;
//terme d'indice 0 (ds gk) de la serie acceleree p fois 
//(sans p!/2^p=fact2)
  gk:=1/fact;
//on conserve gk/2 dans t0 car il faut rajouter t0 
//au prochain sf 
  t0:=gk/2;
  sg:=sg+gk;
  alt:=-1;
  for (k:=1;k<=n;k++) {
     gk:=1/(k+1);
//terme d'indice k (ds gk) de la serie acceleree p fois 
//(sans p!/2^p=fact2)
     for (j:=1;j<=p;j++) {
       gk:=evalf(gk/(k+j+1));
     }
     sg:=sg+alt*gk;
     alt:=-alt;
  } 
ls:=concat(ls,sf+fact2*sg);
}
return(ls);
}
On met ce programme dans un niveau éditeur de programmes (que l'on ouvre avec Alt+p), puis on le teste et le valide avec OK et on tape dans une ligne de commandes :
seriealt_sumacc(200,3)
On obtient :
[0.69562855486,0.693153307335,0.693147210666,0.693147180781] On tape :
seriealt_sumacc(100,4)
On obtient :
[0.698073169409,0.693171208625,0.693147412699,
0.693147183892,0.693147180623]
next up previous contents index
suivant: La transformation d'Euler pour monter: Un exemple d'accélération de précédent: Un exercice   Table des matières   Index
Documentation de giac écrite par Renée De Graeve