Calcul formel : Mode d'emploi - Exemples en Maple

Claude Gomez, Bruno Salvy, Paul Zimmermann

Masson, 1995

Chapitre I, section 2.7, exercice 8, page 32.

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.3 worksheet
Maple V.4 worksheet
Maple V.5 worksheet


Dans la version V.3 (qui a servi pour l'écriture du manuel) la résolution se déroule très simplement.

> sys:={x*y=a^2,ln(x)^2+ln(y)^2=5/2*ln(a)^2}:
inc:={x,y}:

> solve(sys,inc);

[Maple Math]

Depuis la version V.4, le progrès a fait rage.

> sys:={x*y=a^2,ln(x)^2+ln(y)^2=5/2*ln(a)^2}:
inc:={x,y}:

> S1:=solve(sys,inc);

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

On peut tenter de simplifier l'expression, mais cela ne change pas grand'chose à l'affaire.

> S2:=map(simplify,S1,ln,symbolic);

[Maple Math] [Maple Math]

Le résultat est un peu déroutant. On pourrait penser utiliser convert/radical, mais cette procédure opère des choix de branches pour les radicaux et on perd des solutions.

> convert(S,radical);

[Maple Math]

> map(simplify,",ln,symbolic);

[Maple Math]

> map(simplify,",power,symbolic);

[Maple Math]

À l'inverse, la procédure allvalues remplace les RootOfs de toutes les façons possibles et sans soin. Si un même RootOf apparaît plusieurs fois, disons k fois, dans une expression et peut prendre n valeurs alors on obtient k*n valeurs et non n comme on est en droit de s'y attendre. Ici RootOf(2*ln(a^2)^2-2*ln(a^2)*_Z+_Z^2-5*ln(a)^2) apparaît deux fois et représente deux valeurs :

> X:={allvalues(RootOf(3*ln(a)^2-4*ln(a)*_Z+_Z^2))};

[Maple Math]

L'emploi de allvalues va donc fournir quatre valeurs et non deux. D'autre part l'autre RootOf correspond à une extraction de racine carrée et donne donc deux valeurs. On va donc obtenir huit couples au lieu de deux.

> S4:={allvalues(S2)};

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

Il ne reste plus alors qu'à opérer un tri pour ne conserver que les solutions du problème.

> select(proc(s,sys)
evalb(convert(
simplify(eval(subs(s,sys)),ln,symbolic),
`and`))
end,S4,sys);

[Maple Math]

Ceci n'est guère satisfaisant. Revenons à de sains principes. Un système de calcul formel a comme domaine de prédilection les polynômes et les fractions rationnelles. C'est là qu'il excelle. Le système proposé est polynomial en ln(x) et ln(y). Ceci est un point de départ solide qui nous fournit une méthode de résolution.

> sys2:={X^2+Y^2-5/2*A^2,X+Y-2*A};

[Maple Math]

> ss:=[solve(sys2,{X,Y})];

[Maple Math]

> subs({X=ln(x),Y=ln(y),A=ln(a)},ss);

[Maple Math]

> map(solve,",{x,y});

[Maple Math]

Retour en page principale