Calcul formel : Mode d'emploi - Exemples en Maple

Claude Gomez, Bruno Salvy, Paul Zimmermann

Masson, 1995

Chapitre VIII, section 2.7, exercice 1, page 212.

Philippe.Dumas@inria.fr
http://algo.inria.fr/dumas/Maple/

Page du Projet Algorithmes | Page de Philippe Dumas | Page Maple de Philippe Dumas

Retour en page principale
Table des matières
Index
Maple V.4 worksheet
Maple V.5 worksheet


Calcul naïf | Calcul efficace

Calcul naïf. Nous employons la méthode présentée pages 206-207. Nous définissons l'équation puis la précision désirée.

> eq:=diff(y(z),z)-y(y(z))-cos(z);

[Maple Math]

> N:=6;

[Maple Math]

La condition initiale y(0)=0 impose aussi y'(0)=1 et la série débute donc comme dans le cas présenté en exemple.

> f:=proc(z) 
local i;
global N;
z+add(a[i]*z^i,i=2..N+2)
end:

> s:=series(eval(subs(y=f,eq)),z,N+2);

[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]

Nous prenons soin d'avoir autant d'inconnues que d'équations.

> sys:={seq(coeff(s,z,i),i=0..N)};
inc:={seq(a[i],i=2..N+1)};

[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]

[Maple Math]

Le système n'est pas linéaire mais il est triangulaire. Autrement dit, il est équivalent à une récurrence. Cette remarque est la clé pour prouver que l'équation différentielle possède exactement une solution série formelle.

> S:=solve(sys,inc);

[Maple Math]

> F:=series(subs(S,f(z)),z,N+1);

[Maple Math]

Calcul efficace. Comme il est expliqué à la page 207, le calcul précédent n'est pas assez efficace. Pour N grand, on passe donc à une méthode itérative.

> N:=50:

> start:=time():

> for i from 2 to N do
sol:=subs(ii=i,
proc(z)
local j;
z+add(a[j]*z^j,j=2..ii)
end);
equa:=op(1,series(eval(subs(y=sol,eq)),z,i));
a[i]:=solve(equa,a[i])
od:
F:=series(sol(z),z,N+1);
a:='a':
time()-start;

[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]

[Maple Math]

Ainsi le calcul aboutit (contrairement à ce qui se serait passé avec la première méthode), mais demande un peu de temps.

On notera aussi que le style est critiquable car les a[i] sont à la fois des symboles (ou indéterminées) mathématiques et des variables informatiques (voir page 56, deuxième paragraphe). On a tenté de corriger ceci par l'instruction a:='a':. Il ne s'agit pas d'un simple souci esthétique. Ainsi la boucle peut être réexécutée sans provoquer d'erreur.

Retour en page principale