Jusqu'à présent, nous avons utilisé Maxima en mode interactif, comme une super
calculatrice. Toutefois, pour des calculs qui nécessitent une séquence de
commandes répétitive, il est préférable d'exécuter un programme. Nous
présentons maintenant un exemple de court programme permettant le calcul des
points critiques d'une fonction de deux variables
et
. Le programme
demande à l'utilisateur d'entrer une fonction
, puis il calcule les
dérivées partielles
, et enfin il fait appel à la commande SOLVE de Maxima pour
obtenir les solutions du système d'équations :
/*-------------------------------------
Ceci est le programme critpts.max
comme vous le voyez, les commentaires avec Maxima sont analogues à ceux en langage C
Auteur : Nelson Luis Dias
Créé le 07/07/2000
-----------------------------------------*/
critpts():=(
print("Programme pour déterminer les points critiques "),
/* --------------------------------------
On entre une fonction
-----------------------------------------*/
f:read("Entrez f(x,y)"),
/*----------------------------------------
On renvoie la réponse pour vérification
------------------------------------------*/
print("f = ",f),
/*-----------------------------------------
On construit une liste avec les dérivées partielles :
-------------------------------------------*/
eqs:[diff(f,x),diff(f,y)],
/*--------------------------------------------
On construit la liste des inconnues
------------------------------------------*/
unk:[x,y],
/*-------------------------------------------
On résout le système
---------------------------------------------*/
solve(eqs,unk)
)
$
Le programme ( qui est en l'état actuel une fonction sans argument ) s'appelle critpts. Chaque ligne est une commande ( qui doit être valide ) Maxima qui pourrait être exécutée en mode interactif, et qui est séparée de la commande suivante par une virgule. Les dérivées partielles sont stockées dans une liste qui s'appelle eqs, et les inconnues dans une liste qui s'appelle unk. Voici un exemple d'exécution du programme :
(C1) batch("/home/michel/temp/critpts.max");
batching #p/home/michel/temp/critpts.max
(C2) critpts() := (PRINT("Programme recherchant les points critiques "),
f : READ("Entrez f(x,y)"), PRINT(" f = ", f), eqs : [DIFF(f, x), DIFF(f, y)],
unk : [x, y], SOLVE(eqs, unk))
(C3) critpts();
Programme recherchant les points critiques
Entrez f(x,y)
%E^ (x^ 3+y^ 2)*(x+y);
(D3) [[x = 0.4588955685487 %I + 0.35897908710869,
y = 0.49420173682751 %I - 0.12257873677837],
[x = 0.35897908710869 - 0.4588955685487 %I,
y = - 0.49420173682751 %I - 0.12257873677837],
[x = 0.41875423272348 %I - 0.69231242044203,
y = 0.86972626928141 %I + 0.4559120701117]]
y = 0.4559120701117 - 0.86972626928141 %I],
[x = - 0.41875423272348 %I - 0.69231242044203,
y = 0.86972626928141 %I + 0.4559120701117]]