Calcul formel : Mode d'emploi - Exemples en Maple
Claude Gomez, Bruno Salvy, Paul Zimmermann
Masson, 1995
Chapitre IX, section 3.3, exercice 2, page 253.
Philippe.Dumas@inria.fr
http://algo.inria.fr/dumas/Maple/
|
|
La version V.3 de Maple apparaît parfois comme un eden calculatoire. En ce temps là tout était simple.
> i:=Int(1/(2*x-1)^3/(x*(x-1)^2)^(1/3),x);
> F:=value(student[changevar](t=((x-1)/x)^(1/3),i,t));
> F:=subs(t=((x-1)/x)^(1/3),F);
> factor(normal(simplify(diff(F,x),power,symbolic),expanded));
Et voilà, c'est fini.
Passons à la version V.5.
> i:=Int(1/(2*x-1)^3/(x*(x-1)^2)^(1/3),x);
> F:=value(student[changevar](t=((x-1)/x)^(1/3),i,t));
Diantre, ça commence fort. Nous n'avons même pas l'intégrale. Aidons un peu le système. Notez que nous employons l'option symbolic.
> G:=Int(simplify(op(1,F),power,symbolic),op(2,F));
> G:=value(G);
Bon, nous avons franchi le premier obstacle. Nous revenons à la primitive en x et nous la dérivons.
> H:=subs(t=((x-1)/x)^(1/3),G);
> diff(H,x);
Nous simplifions un peu l'expression de la dérivée de la primitive. Notez à nouveau l'emploi de l'option symbolic. Cet emploi a pour effet de faire sortir un (-1)^(2/3).
> K:=simplify(diff(H,x),power,symbolic);
Nous tentons de simplifier les puissances.
> L:=combine(subs(x-1=y^3,x=z^3,K),power,symbolic);
Il apparaît que combine ne descend pas récursivement dans les opérandes de l'expression. Nous nous en remettons donc à simplify/power, boîte noire dont nous ne contrôlons pas le comportement. Cependant nous procédons à un changement de variables pour passer à une quantité rationnelle. (Il reste toutefois ce (-1)^(2/3) que nous finissons par jeter.)
> L:=simplify(subs(x-1=y^3,x=z^3,K),power,symbolic);
> L:=1/expand(denom(L));
> M:=1/z/y^2/normal(denom(L)/z/y^2,expanded);
Nous revenons à l'ancienne variable.
> N:=subs(y=(x-1)^(1/3),z=x^(1/3),M);
> N:=factor(N);
Enfin nous sommes arrivés au but.
La question qui demeure est la suivante : vaut il mieux un système de calcul purement symbolique (dans le style de Maple V.3) ou un système qui interprète les symboles comme des variables complexes (comme le fait souvent Maple V.5) ? Certes l'interprétation évite l'écriture de résultats grossièrement faux (et qui amènent des reproches virulents de la part des utilisateurs). Cependant le calcul formel est avant tout un calcul algébrique et on peut bien imaginer de substituer autre chose que des nombres complexes dans une identité algébrique. En dernier ressort, c'est l'utilisateur et lui seul qui sait comment interpréter les formules qu'il obtient.