Calcul formel : Mode d'emploi - Exemples en Maple
Claude Gomez, Bruno Salvy, Paul Zimmermann
Masson, 1995
Chapitre VIII, section 3.8, exercice 2, page 225.
Philippe.Dumas@inria.fr
http://algo.inria.fr/dumas/Maple/
|
|
1. Les termes de la série croissent puis décroissent. Si nous considérons le rapport r de deux termes consécutifs, il est donc d'abord plus grand que 1, puis plus petit que 1. Nous cherchons l'entier où il vaut approximativement 1. Pour cela nous explicitons r, nous fixons la précision du calcul et nous résolvons asymptotiquement l'équation r=1. Précisément, nous écrivons et l'équation est sous la forme . Cependant le premier terme du développement de ce coefficient a est en et non en . Suivant la recommandation de la page 207, nous récrivons donc l'équation sous la forme et nous employons pour calculer au voisinage de zéro.
> u:=(Pi/2)^(2*n+1)/(2*n+1)!/(4*n+3)*x^(4*n+3):
> r:=simplify(convert(subs(n=n+1,u)/u,GAMMA),GAMMA):
> r:=combine(r,power,symbolic):
> Order:=15:
> s:=series(subs(n=1/z,r/x^4),z);
> da:=subs(t=1/x^2,series(1/solve(series(s^(1/2),z)=t,z),t));
Nous obtenons ainsi un développement asymptotique de l'entier qui fournit le terme maximal en fonction de x. On nous demande la valeur maximale. Il suffit donc de substituer ce développement dans l'expression du terme général et de développer le résultat. Il est plus efficace de substituer le développement de l'entier dans le développement du terme général fourni par la formule de Stirling. Nous commençons par exprimer le terme général à de l'aide de la fonction Gamma et à prendre le logarithme de façon à appliquer la formule de Stirling. En Maple V.3, ceci se fait sans problème.
> lnu:=expand(ln(convert(u,GAMMA)));
En Maple V.5, la paranoïa usuelle qui fait voir toute expression comme une fonction de variable complexe bloque le développement du logarithme et oblige à employer assume.
> assume(n,posint);
assume(x>0);
> lnu:=expand(ln(convert(u,GAMMA)));
On peut ensuite calculer le développement asymptotique du logarithme de la valeur maximale.
> lnumax:=subs(n=da,lnu);
> asympt(lnumax,x);
> dalnumax:=map(combine,%,exp);
On passe enfin à la valeur maximale elle-même.
> daumax:=asympt(exp(dalnumax),x);
> daumax:=combine(daumax,ln);
On peut tenter d'améliorer l'expression. Cela demande beaucoup d'energie pour peu de chose. On note que la valeur maximale est de l'ordre de .
2. Nous cherchons l'indice n du terme de taille epsilon pour epsilon tendant vers 0. Précisément nous voulons un développement asymptotique de cet indice en fonction d'epsilon. Il s'agit donc de chercher le développement asymptotique d'une fonction réciproque. Pour cela nous commencer par chercher un développement du terme d'indice n.
> Order:=3;
> u:=(Pi/2)^(2*n+1)/(2*n+1)!/(4*n+3)*x^(4*n+3):
assume(n,posint);
assume(x>0);
lnu:=expand(ln(convert(u,GAMMA)));
> dalnu:=asympt(lnu,n);
Cette dernière expression est un développement asymptotique du logarithme du terme général. L'équation qui nous intéresse s'ecrit, à l'aide de ce développement,
.
ou encore (Nous préférons ln(1/epsilon) qui va vers l'infini positif à ln(epsilon) qui va vers l'infini négatif.)
.
Nous prenons le logarithme des deux membres pour récrire le terme dominant n*ln(n) sous une forme plus maniable. Cela donne
.
Le terme
se développe suivant les puissances de et Cependant les termes qui comportent sont négligeables devant tous les termes qui ne comportent que des puissances de Pour obtenir un développement asymptotique, il revient donc au même de considérer l'équation simplifiée
.
On notera la similitude du raisonnement avec celui de l'exercice 3, page 74. Nous récrivons l'équation simplifiée
.
Sous cette forme, nous avons une équation de point fixe qui par itération et développement asymptotique va fournir un développement suivant les puissances de ln(ln(1/epsilon)). Précisément, avec les notations , , , , que nous allons employer dans la suite, nous allons obtenir un développement suivant les puissances de ln(ln(1/epsilon)) à coefficients des polynômes en ln(ln(ln(1/epsilon))),
Par exponentiation cela fournira pour l'indice n du terme de valeur epsilon un développement de la forme
.
Pour obtenir le développement, il suffit d'expliciter le membre droit de l'équation et d'itérer la transformation correspondante.
> assume(C>0);
> Order:=4:
> equ:=lambda[2]-ln(L[1])-ln(2)-ln(1-C/2/L[1]);
> da:=lambda[2]-ln(L[1])-ln(2):
to 4 do
da:=asympt(map(collect,subs(ln(lambda[2])=lambda[3],
asympt(subs(L[1]=da,equ),lambda[2])),
lambda[3]),lambda[2])
od;
> assume(x>0);
> Cvalue:=combine(-ln(4)+2-2*ln(2)+2*ln(Pi)+4*ln(x),ln);
> da:=subs(C=Cvalue,da);
> DA:=asympt(exp(da),lambda[2]);
> DA:=subs(exp(lambda[2])=lambda[1],
exp(-lambda[3]-ln(2))=1/2/lambda[2],DA);
> DA:=lambda[1]/2/lambda[2]*
asympt(DA/(lambda[1]/2/lambda[2]),lambda[2]);
Finalement nous avons obtenu le petit développement
.
On voit que l'on retrouve bien le résultat annoncé page 197. En particulier le premier terme du développement est bien indépendant de x.