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]]