# Maxima (logiciel)

Maxima est un logiciel libre de calcul formel, descendant du logiciel Macsyma, développé dès 1968 au sein du projet MAC du MIT (le nom Macsyma est tiré de « Project MAC's Symbolic Manipulator »)$^,$$^,$. Il est disponible sous GNU/Linux, Mac OS X, Windows et Android. Maxima est distribué sous licence GNU GPL depuis 1998. Le logiciel est programmé en Lisp, tout comme les systèmes de calcul formel Reduce (en), Derive, et Axiom.

## Historique

Né à la fin des années 1960 au MIT, Macsyma a servi de « terrain d'expérimentation » pour de nombreux algorithmes de calcul formel. Ainsi lorsque Robert Henry Risch (en) publia son algorithme d'intégration, sa première mise en œuvre fut réalisée avec Macsyma$^,$. Soit dit en passant, l'algorithme de Risch développé avec Macsyma est incomplet, et n'inclut pas le cas algébrique, ce qui est précisé dans l'article de Joel Moses précédemment cité. C'est toujours le cas aujourd'hui dans Maxima, comme le montre la documentation (voir « ? risch »). On peut s'en convaincre sur l'exemple suivant, qui renvoie bien 0, alors que Maxima se montre incapable de calculer la primitive à l'aide de risch(x/sqrt(x^4+10*x^2-96*x-71),x); :
Richard Fateman (en), qui a fait partie des développeurs de Macsyma au MIT, et qui participe aujourd'hui au développement de Maxima, indiquait en 2009 que la question n'était sans doute pas assez importante pour que le cas algébrique soit ajouté au logiciel.
Au cours de son développement, le projet Macsyma a reçu des financements de l'ARPA, la NASA, l'Office of Naval Research, et le département de l'Énergie (DOE). Il est cédé en 1982 au National Energy Software Center (NESC), du DOE. Peu de temps après, une version est commercialisée par la société Symbolics, spécialisée dans les machines Lisp.
Maxima est lancé par William Schelter en 1982 à partir de la version DOE-Macsyma (la version du MIT, avant commercialisation par Symbolics). Il crée également GCL (en), un compilateur de Common Lisp, dont un des objectifs est de compiler Maxima. Cela nécessitait également de revoir le code de Macsyma, qui était écrit en MacLisp, une version de Lisp développée au MIT en même temps que Macsyma, soit bien avant la standardisation par l'ANSI.
À peu près à la même époque au début des années 1980, un projet similaire est initié par Fateman et ses étudiants à Berkeley, d'un nouveau compilateur de Lisp, nommé Franz Lisp (en) (qui deviendra Allegro Common Lisp (en) en 1988), afin de porter Macsyma sur les machines VAX nouvellement acquises par l'université. Avec cette version de Lisp, la compilation de Macsyma peut être réalisée grâce à un mode de compatibilité avec MacLisp.
Schelter commence à travailler sur un compilateur de Lisp en 1987, alors appelé AKCL, une version modifiée de Kyoto Common Lisp (en) qui remontait à 1984$^,$. Ce dernier permettait de compiler Maxima sous Unix sur IBM PC et sur station de travail Sun. À l'origine, AKCL, tout comme KCL, est basé sur le document « Common Lisp the Language (en) » de Guy Steele, publié en 1984. Le standard ANSI Common Lisp ne sera finalisé qu'en 1994. C'est également en 1994 que AKCL est renommé GCL et distribué sous licence GPL.
Au début des années 1990, une licence payante pour Maxima devait être demandée auprès du NESC, propriétaire des droits sur DOE-Macsyma et donc Maxima. En juillet 1991, la version distribuée par Schelter est Maxima 4.155. Dès décembre 1991 le NESC n'existe plus, et ses compétences sont transférées d'Argonne à l'ESTSC d'Oak Ridge. En 1994 est distribué Maxima 5.0, le premier à être compilé avec GCL. En raison de la disparition du NESC, le statut légal de Maxima n'est plus très clair, et la même année, Richard Petti, directeur de la société Macsyma Inc. distribuant la version commerciale, émet des réserves quant à la distribution de Maxima ainsi que son nom, considérés comme une violation de copyright. En octobre 1998, William Schelter reçoit du DOE l'autorisation d'appliquer la licence GNU GPL à Maxima, réglant ainsi le problème juridique. Maxima en est alors à la version 5.4.
Schelter maintient Maxima et GCL jusqu'à sa mort, en 2001. Depuis lors, une communauté de développeurs tient régulièrement le programme à jour. Le projet a été transféré de l'université du Texas vers Sourceforge, et le code a commencé à être « nettoyé » de certaines incompatibilités et commentaires obsolètes. La version distribuée en août 2012 est Maxima 5.28.0.
Il existe principalement trois versions du programme : celui du MIT, parfois appelé « DOE-Macsyma » pour la version cédée au DOE (notamment pour des raisons légales), la version commercialisée par Symbolics puis par Macsyma Inc, « Macsyma », et enfin la version libre, « Maxima ». En ce sens, Maxima est un descendant du DOE-Macsyma d'origine, pas de la version commercialisée, qui a eu des développements différents. Macsyma n'est d'ailleurs plus modifié depuis 1999 (version 2.4), même s'il est encore commercialisé. Dans le passé d'autres dérivés de DOE-Macsyma ont été développés, mais ont été abandonnés : VAXIMA pour les DEC VAX, PUNIMAX basée sur le compilateur CLISP (en), etc.
En janvier 2005, William A. Stein entreprend le développement de SageMath. L'interface avec Maxima est ajoutée dans la version 0.9.25, en décembre 2005.

## Fonctionnalités

Maxima permet de faire du calcul sur les polynômes, les matrices, de l’intégration, de la dérivation, du calcul de séries, de limites, résolutions de systèmes, d’équations différentielles, les séries de Poisson (utilisées en mécanique céleste), etc. Maxima est distribué avec un assez grand nombre de bibliothèques externes, par exemple le module SYM de manipulations de fonctions symétriques et de calculs de résolvantes écrit par Annick Valibouze$^,$.
Maxima est un logiciel écrit en Lisp et son langage de commande est inspiré de ce langage. Notamment pour cette raison, les possibilités d'extension de Maxima sont très riches. Il est possible d'utiliser des commandes Lisp sous Maxima, interprétées ou compilées. L'interfaçage avec Maxima est donc très aisé.
Les possibilités graphiques de Maxima sont plus limitées que celles de Mathematica et de Maple. Elles viennent en plusieurs « jeux » : le paquet plot par défaut, le paquet draw disponible avec load(draw)$ et les fonctions mises à disposition par wxMaxima (wxplot2d, wxplot3d), qui permettent également de réaliser des animations (with_slider_draw, with_slider_draw3d). Toutes font appel à gnuplot, de façon transparente.
Pour des besoins de publication, il est possible de convertir les formules au format TeX. Il existe aussi un mode d'Emacs pour un affichage des formules Maxima. wxMaxima permet également d'enregistrer des documents complets (formules, texte, titres et sous-titres, etc.) dans son propre format .wxm (en réalité un simple script Maxima avec des annotations en commentaire, comprises par wxMaxima).

## Calculs numériques

Comme tous les programmes de calcul formel, Maxima est spécialisé dans les manipulations de symboles. Cependant, il sait également produire des résultats numériques sous forme d'entiers et de fractions de taille arbitraire, ou bien encore de réels à virgule flottante de précision arbitrairement grande (bfloat pour big floats), en plus des flottants « machine », suivant habituellement le standard IEEE 754 sur les ordinateurs actuels.
Pour les calculs utilisant intensivement les nombres à virgule flottante et les grands tableaux, Maxima peut générer du code en Fortran, code qui peut être compilé séparément. Il intègre aussi du code de plusieurs bibliothèques en Fortran, dont Lapack et Quadpack, convertis en Lisp.