# Introduction au logiciel Maxima/Interface et premiers exemples

1. Interface utilisateur et premiers exemples

## Interface

Maxima est un langage interprété, en ligne de commande : on tape une expression (suite de commandes et de paramètres), on valide avec la touche [Entrée], et on obtient son résultat.
Attention :
    il peut y avoir une différence de comportement entre la touche [Entrée] du pavé numérique et la touche [Entrée] située à côté des touches alphabétiques.
L'invite de commande est de la forme %in où n est le numéro de la commande (« i » pour input). Le résultat est indiqué sur la ligne d'après, précédé de %on (« o » pour output).
Si l'on ne veut pas que le résultat s'affiche, on termine la ligne par un signe dollar $.
Si l'on ne veut pas qu'une expression soit évaluée, on met une apostrophe ' devant. Par exemple, diff(x, t, 2); renvoie 0 (on dérive deux fois par rapport à t une expression ne contenant pas t), tandis que 'diff(x, t, 2); renvoie d$^2$x/dt$^2$ (expression non évaluée, laissée telle quelle).

## Premiers exemples
### Calculs simples

Dans les expressions n°2 et 8, le pour-cent % désigne le dernier résultat obtenu.
Dans l'expression n°3, la commande float transforme la valeur symbolique √3 en nombre décimal approché (réel à virgule flottante). De même, dans l'expression n°8, il transforme l'expression symbolique sin(2)/2 en valeur décimale approchée.
Dans l'expression n°5, on définit la fonction ƒ. Dans l'expression n°6, on définit la variable a et on lui attribue la valeur de 2. L'expression n°7 calcule ƒ(a).

### Tracés graphiques

L'expression n°1 trace la fonction y = x² pour x variant de -1 à 1.
L'expression n°3 trace la fonction ƒ(x, y), chacune des variables variant entre -2π et 2π.

### Calculs formels

Les expressions n°1 et 2 montrent le développement et la factorisation d'une expression.
L'expression n°3 définit une fonction rationnelle et la met dans la variable a.
L'expression n°4 calcule a(2) : elle consiste à substituer 2 à « x » dans l'expression de a.
L'expression n°6 donne la primitive de sin(x). L'expression n°7 consiste à intégrer sin(t) entre 0 et x. Maxima demande si x est positif, négatif ou nul. Les réponses peuvent être positive, negative, zero, ou bien les abréviations pos, neg ou 0.
    $\int _{0}^{x}\sin(t)\mathrm {d} t=1-\cos(x)$

#### Résolution d'équations linéaires et polynomiales

L'expression n°1 cherche les valeurs de x qui sont solution de
    x$^2$ + 2x - 10 = 0.
Notons que si le second membre est nul, on peut l'omettre : on aurait pu écrire solve(x^2 + 2*x - 10, x).
L'expression n°2 cherche les couples de valeurs (x, y) qui sont la solution du système linéaire
    ${\begin{cases}3x+4y&=&7\\2x+2y&=&13\end{cases}}$
S'il s'agit d'un système polynomial, on utilise algsys, avec la même syntaxe (expression n°3).
La fonction eliminate permet d'éliminer une inconnue. Par exemple :
nous indique que si l'on élimine la variable x du système n°2, on obtient l'équation $-2y-25=0$. Cela permet de contourner des défaut du solveur. Par exemple, la version 5.43.0 de Maxima n'est pas capable de résoudre directement le système :
    ${\begin{cases}\mathrm {X} =x\left(1+{\frac {(1-x)^{2}y^{2}}{(1-x)^{2}}}\right)\\\mathrm {Y} =y{\frac {(1-x)^{2}}{(1-x)^{2}}}\end{cases}}$
c'est-à-dire d'exprimer x et y' en fonction de X et de Y. En effet :
Les solutions trouvées correspondent à des situations de type 0/0. On peut contourner le problème avec
mais il faut ensuite trier les paires de solution…

#### Résolution d'équations différentielles ordinaires

Dans l'expression n°1, nous définissons une équation différentielle ordinaire (EDO) d'ordre 2. Notez l'apostrophe qui interdit à Maxima d'effectuer la dérivation : l'expression « x » ne contenant pas de « t », l'évaluation de diff(x, t, 2) donnerait 0. L'apostrophe au début de 'diff(x, t, 2) permet de garder l'expression intacte et donc de travaille avec (d²x/dt²).
L'expression n°2 résout cette EDO. Les paramètres %k1 et %k2 désignent des constantes arbitraires k$_1$ et k$_2$. Une constante d'intégration serait notée %c.
Donc ici, Maxima nous indique que les solutions de l'EDO ${\frac {\mathrm {d} ^{2}x}{\mathrm {d} t^{2}}}+2x+1=0$ sont les fonctions de la forme $x=k_{1}\cdot \sin({\sqrt {2}}t)+k_{2}\cdot \cos({\sqrt {2}}t)-{\frac {1}{2}}$.

### Optimisation

Pour l'optimisation linéaire par la méthode du simplex, on peut utiliser la commande minimize_lp du module « simplex » :
Ici, nous cherchons le minimum dex + y avec pour contraintes x + 2y ≥ 2, x ≥ 0 et y ≥ 0. La valeur minimale est 1 et est obtenue pour le couple de valeurs (x = 0 ; y = 1).
On peut utiliser la méthode de quasi-Newton, en particulier la méthode de Broyden-Fletcher-Goldfard-Shanno à mémoire limitée (L-BFGS) :
Ici, nous cherchons la valeur de x donnant le minimum de y = x$^2$ + 2, en partant d'une valeur initiale de x valant x$_0$ = 5, et avec un pas de 10$^{-3}$. Le dernier paramètre [0, 0] détermine le rapport de calcul généré.
La dernière ligne du rapport nous indique qu'il a fallu 2 itérations (I), donc trois évaluations de la fonction (NFN), et que la valeur minimale est 2 (FUNC). Cette valeur est atteinte pour x = 0.

### Vecteurs

Dans l'expression n°1, nous définissons les vecteurs (i, j, k) de la base canonique de ℝ$^3$. Dans l'expression n°4, nous calculons le produit scalaire. Pour éviter la confusion avec le point décimal, nous mettons un espace avant et après.
Dans l'expression n°5, nous chargeons un module complémentaire appelé « vect ». Ce module fournit entre autres le produit vectoriel (cross product), par l'opérateur ~ (tilde). Il faut utiliser la commande express pour que le calcul soit effectué (expression n°7).
Ici, nous définission un vecteur a. L'expression n°2 extrait la première composante du vecteur. En n°3, nous calculons la norme d'un vecteur a. Puis, nous chargeons l'extension « eigen » ; cela nous fournit la commande unitvector (abrégée en uvect), qui calcule le vecteur unitaire colinéaire à a.
Ici, nous définissons un vecteur de vecteurs. La première composante de A est le vecteur i, et la première composante de la première composante est le nombre 1.

### Matrices

Nous définissons ici la matrice A de ℝ$^3$. Nous en prenons la transposée. Dans l'expression n°3, nous calculons le produit matriciel de A par sa transposée, que nous multiplions par 5. Dans l'expression n°4, nous calculons le produit matriciel de la transposée de A par A.
Dans l'expression 5, nous effectuons une multiplication terme-à-terme.
Dans l'expression n°6, nous définissons la matrice unité de ℝ$^3$×ℝ$^3$.

## Notes et références

Sommaire < ↑ > Calculs élémentaires