Calcul formel : Mode d'emploi - Exemples en Maple
Claude Gomez, Bruno Salvy, Paul Zimmermann
Masson, 1995
Chapitre V, section 2.5, exercice 2, page 137.
Philippe.Dumas@inria.fr
http://algo.inria.fr/dumas/Maple/
|
|
Un développement suivant la dernière colonne donne tout de suite la récurrence cherchée. D'ailleurs ce procédé fonctionne pour toutes les matrices tridiagonales, mais le fait que la récurrence soit à coefficients constants demande que sur une parallèle à la diagonale tous les coefficients soient égaux.
> rec:={u(1)=x,u(2)=x^2-1,u(n+1)=x*u(n)-u(n-1)};
Vérifions que nous sommes dans le vrai en testant la récurrence sur les premiers entiers.
> dim:=10:
> for d to dim do
A[d]:=array(1..d,1..d,sparse);
for i to d-1 do A[d][i,i+1]:=1 od;
for i to d do A[d][i,i]:=x od;
for i from 2 to d do A[d][i,i-1]:=1 od;
od:
> for d to dim do
Delta[d]:=linalg[det](A[d])
od;
> for d from 3 to dim do collect(Delta[d]-x*Delta[d-1]+Delta[d-2],x) od;
Rassurés nous tentons la résolution.
> U:=rsolve(rec,u(n));
Un déterminant est une fonction polynôme par rapport aux coefficients de la matrice et ici les coefficients sont des polynômes en x. Il est donc clair que les déterminants considérés sont des polynômes en x. Ceci n'apparaît pas explicitement sur l'expression précédente. Nous transformons donc pas à pas et pour les premiers entiers le résultat obtenu de manière à mettre en valeur le caractère polynomiale de l'expression. Il semble normal d'appeler simplify/radical.
> for nn to 2 do simplify(subs(n=nn,U),radical,symbolic) od;
Cependant le domaine préféré d'un système de calcul formel est celui des fractions rationnelles. Nous nous ramenons donc à cette situation.
> for nn to 2 do subs(n=nn,(x^2-4)^(1/2)=y,(x^2-4)^(-1/2)=1/y,U) od;
> for nn to 2 do expr[nn]:=normal(subs(n=nn,(x^2-4)^(1/2)=y,(x^2-4)^(-1/2)=1/y,U),expanded) od;
> for nn to 2 do subs(y=sqrt(x^2-4),expr[nn]) od;
> for nn to 2 do normal(subs(y=sqrt(x^2-4),expr[nn]),expanded) od;
Ayant trouvé le bon chemin, nous appliquons la séquence de calcul sur une plus grande échelle.
> for nn to dim do
normal(subs(y=sqrt(x^2-4),
normal(subs(n=nn,(x^2-4)^(1/2)=y,(x^2-4)^(-1/2)=1/y,U),expanded)),
expanded)
od;
Nous avons bien retrouvé les expressions rencontrées au début. Cependant ceci ne nous donne pas l'expression générale. Il n'est pas besoin d'être grand clerc pour reconnaître des coefficients binomiaux dans les polynômes ci-dessus. Ceci n'est pas étonnant puisque l'expression U est la somme des puissances nièmes de deux quantités conjuguées. Le calcul suivant a le mérite de mettre en valeur ces coefficients binomiaux.
> C:=array(1..dim,1..dim,sparse):
for nn to dim do for i to nn do C[nn,i]:=coeff(Delta[nn],x,i) od od:
> print(C);
Le lecteur n'aura pas de mal à deviner l'expression générale des polynômes considérés et à fournir une preuve que ses vues sont justes.
Notons pour finir que l'apport du logiciel est relativement limité ici. Cet exercice classique se traite à la main et l'aide apportée est contrebalancée par des problèmes de simplification que le calculateur humain résout aisément.