Maxima (logiciel)
Développé par | William Schelter et coll. |
---|---|
Première version | |
Dernière version | 5.47.0 ()[1] |
Dépôt | sourceforge.net/p/maxima/code/ci/master/tree et git://git.code.sf.net/p/maxima/code |
Écrit en | Lisp |
Système d'exploitation | Microsoft Windows, Linux et macOS |
Environnement | Multiplate-forme |
Formats lus | Maxima file format (d) |
Formats écrits | Maxima file format (d) |
Type | Logiciel de calcul formel |
Licence | GNU GPL |
Site web | maxima.sf.net |
Chronologie des versions
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 »)[2],[3],[4]. Il est disponible sous Linux, Mac OS X et Windows. Maxima est sous licence GNU GPL depuis 1998.
Historique
Né à la fin des années 1960, Macsyma a servi de « terrain d'expérimentation » pour de nombreux algorithmes de calcul formel. Ainsi lorsque Risch publia son algorithme d'intégration, sa première implémentation fut réalisée avec Macsyma[5],[6].
Soit dit en passant, l'algorithme de Risch implémenté par 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);
:
f(x):=x/sqrt(x^4+10*x^2-96*x-71)$
F(x):=-1/8*log((x^6+15*x^4-80*x^3+27*x^2-528*x+781)*sqrt(x^4+10*x^2-96*x-71)
-(x^8+20*x^6-128*x^5+54*x^4-1408*x^3+3124*x^2+10001))$
diff(F(x),x)-f(x),ratsimp;
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[7].
Au cours de son développement, le projet Macsyma a reçu des financement 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[8]. 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, 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é[9]. Dans cette implémentation de Lisp, la compilation de Macsyma peut être réalisée grâce à un mode de compatibilité avec MacLisp[10].
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[11]. Ce dernier permettait de compiler Maxima sous Unix sur IBM PC et sur station de travail Sun[8]. À l'origine, AKCL, tout comme KCL, est basé sur le document « Common Lisp the Language » 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[12]. En juillet 1991, la version distribuée par Schelter est Maxima 4.155[13]. 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[14]. 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[15]. En octobre 1998, William Schelter reçoit du DOE l'autorisation d'appliquer la licence GNU GPL à Maxima[16], 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[2]. 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[17] vers Sourceforge, et le code a commencé à être « nettoyé » de certaines incompatibilités et commentaires obsolètes[18]. 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[15]), la version commercialisée par Symbolics puis par Macsyma Inc, « Macsyma »[19], 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[20]. 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[21], PUNIMAX basée sur le compilateur CLISP[22], etc.
En janvier 2005, William A. Stein entreprend le développement de Sage. L'interface avec Maxima est ajoutée dans la version 0.9.25, en décembre 2005[23].
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[24],[25].
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)[26]. 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.
Bibliographie
- Macsyma Reference Manual, 1977
- (en) Jinhu Li et Jeffrey Racine, « Maxima: An Open Source Computer Algebra System », Journal of Applied Econometrics, vol. 23, no 4, , p. 515-523 (lire en ligne, consulté le )
Notes et références
- « Announcing 5.47.0 », (consulté le )
- A Review of Macsyma, Richard Fateman
- Proceedings of the 1977 MACSYMA Users' Conference, NASA, Langley Research Center, 1977
- Proceedings of the 1984 MACSYMA Users' Conference, General Electric Company, Research and Development Center
- Macsyma: a personal history, Joel Moses, 2008
- Symbolic Integration: The Stormy Decade, Joel Moses, Communications of the ACM, 1971
- Algebraic Risch, message dans la liste de diffusion de Maxima, 16 octobre 2009
- Description de DOE-Macsyma sur le site de l'ESTSC, anciennement NESC
- History of Franz Inc.
- The FRANZ LISP Manual, 1983, p.110
- Description of GCL (GNU Common Lisp) system
- Information about MAXIMA for Common Lisp
- Maxima 4.155
- Energy Science and Technology Software Center (ESTSC), 1995
- Macsyma and Maxima, courrier de Richard Petti du 7 janvier 1994
- Copie du courrier donnant l'autorisation de redistribuer Maxima
- Versions de Maxima maintenues par William Schelter
- Maxima Code Status and Plans, James Amundson
- Version commerciale de Macsyma
- Documentation de la version commerciale, Macsyma 2.1 à 2.4
- MACSYMA, MAXIMA, VAXIMA, ...
- Code source de PUNIMAX
- « Changelog » de Sage
- Le module SYM de MAXIMA
- Symbolic computation with symmetric polynomials - an extension to Macsyma, Annick Valibouze, LITP, 1989
- (en) wxMaxima - Getting Help
Voir aussi
Articles connexes
- Mathematica et Maple : deux concurrents propriétaires
- Yacas, Xcas, GAP, PARI/GP : autres logiciels libres de calcul formel
- Sage, un logiciel de calcul formel qui intègre Maxima
Liens externes
- (en) Site officiel
- (en) wxMaxima, une interface graphique multiplate-forme
- (fr) Site sur Maxima en français (plus très à jour, mais la documentation reste intéressante)
- (en) Une interface web de Maxima