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.