Calcul formel : Mode d'emploi - Exemples en Maple

Claude Gomez, Bruno Salvy, Paul Zimmermann

Masson, 1995

Chapitre II, section 3.4, exercice 4, page 74.

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


L'énoncé demande de définir la dérivée logarithmique sans passer par diff. Cela ne signifie pas que l'on n'emploie pas diff, mais simplement que l'on utilise au mieux les formules comme (uv)'/(uv)=u'/u+v'/v. On se contente de transposer la procédure des pages 70-71. En Maple V.3, on employerait convert/+ appliqué à une liste et non add. De plus les messages d'erreur seraient encadrés d'accents graves et non de guillemets, qui servent à délimiter les chaînes de caractères depuis la version V.5.

> lndiff:=proc(f,x)
local i;
if not has(f,x) then 0
elif f=x then 1/x
elif type(f,`+`) then diff(f,x)/f
elif type(f,`*`) then
add(lndiff(op(i,f),x),i=1..nops(f))
elif type(f,`^`) then
if not has(op(2,f),x) then op(2,f)*lndiff(op(1,f),x)
else lndiff(exp(op(2,f)*ln(op(1,f))),x)
fi
elif type(f,function) then
if op(0,f)=exp then diff(op(1,f),x)
elif op(0,f)=ln then diff(op(1,f),x)/op(1,f)/f
elif op(0,f)=sin then diff(op(1,f),x)*cot(op(1,f))
elif op(0,f)=cos then diff(op(1,f),x)*tan(op(1,f))
elif op(0,f)=tan then lndiff(sin(op(1,f))/cos(op(1,f)),x)
elif op(0,f)=GAMMA and nops(f)=1 then Psi(op(1,f))
else ERROR("this case has not been implemented",args)
fi
else ERROR("arguments do not match the definition",args)
fi
end:

Le cas des fonctions peut être étendu à volonté, mais, comme il est expliqué page 71, ceci n'est pas la bonne manière de procéder. La question est reprise à l'exercice suivant.

Par ailleurs, nous testons le code que nous venons d'écrire sur quelques exemples simples.

> f:=(x^3+1)/(x-1);

[Maple Math]

> lndiff(f,x);

[Maple Math]

> f:=exp(x^2+x);

[Maple Math]

> lndiff(f,x);

[Maple Math]

> f:=ln((x^3+1)/(x-1));

[Maple Math]

> lndiff(f,x);

[Maple Math]

> f:=tan(x);

[Maple Math]

> lndiff(f,x);

[Maple Math]

> f:=GAMMA(2,exp(x));

[Maple Math]

> lndiff(f,x);

[Maple Math]

> trace(lndiff):

> lndiff(1/cos(x),x);

{--> enter lndiff, args = 1/cos(x), x

{--> enter lndiff, args = cos(x), x

[Maple Math]

<-- exit lndiff (now in lndiff) = tan(x)}

[Maple Math]

<-- exit lndiff (now at top level) = -tan(x)}

[Maple Math]

> untrace(lndiff):

Retour en page principale