Maxima (logiciel)

logiciel libre de calcul formel
Maxima
Description de l'image Maximalogo.png.
Description de cette image, également commentée ci-après
wxMaxima
Informations
Développé par William Schelter et coll.
Première version Voir et modifier les données sur Wikidata
Dernière version 5.47.0 ()[1]Voir et modifier les données sur Wikidata
Dépôt sourceforge.net/p/maxima/code/ci/master/tree et git://git.code.sf.net/p/maxima/codeVoir et modifier les données sur Wikidata
Écrit en LispVoir et modifier les données sur Wikidata
Environnement Multiplate-forme
Type Logiciel de calcul formel
Licence GNU GPL
Site web maxima.sourceforge.ioVoir et modifier les données sur Wikidata

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

Maxima pilote Gnuplot

Historique modifier

Né à la fin des années 1960 au MIT[5], 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[6],[7]. 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); :

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[8].

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[9]. 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é[10]. Avec cette version de Lisp, la compilation de Macsyma peut être réalisée grâce à un mode de compatibilité avec MacLisp[11].

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[12],[13]. Ce dernier permettait de compiler Maxima sous Unix sur IBM PC et sur station de travail Sun[9]. À 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[14]. En , la version distribuée par Schelter est Maxima 4.155[15]. Dès le NESC n'existe plus, et ses compétences sont transférées d'Argonne à l'ESTSC d'Oak Ridge[16]. 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[17]. En octobre 1998, William Schelter reçoit du DOE l'autorisation d'appliquer la licence GNU GPL à Maxima[18], 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[19] vers Sourceforge, et le code a commencé à être « nettoyé » de certaines incompatibilités et commentaires obsolètes[20]. La version distribuée en 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[17]), la version commercialisée par Symbolics puis par Macsyma Inc, « Macsyma »[21], 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[22]. 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[23], PUNIMAX basée sur le compilateur CLISP (en)[24], etc.

En , William A. Stein (en) entreprend le développement de SageMath. L'interface avec Maxima est ajoutée dans la version 0.9.25, en [25].

Fonctionnalités modifier

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[26],[27].

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)[28]. 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 modifier

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 modifier

Notes et références modifier

  1. « Announcing 5.47.0 », (consulté le )
  2. a et b A Review of Macsyma, Richard Fateman
  3. Proceedings of the 1977 MACSYMA Users' Conference, NASA, Langley Research Center, 1977
  4. Proceedings of the 1984 MACSYMA Users' Conference, General Electric Company, Research and Development Center
  5. Au sein du projet MAC, débuté en 1963
  6. Macsyma: a personal history, Joel Moses, 2008
  7. Symbolic Integration: The Stormy Decade, Joel Moses, Communications of the ACM, 1971
  8. Algebraic Risch, message dans la liste de diffusion de Maxima, 16 octobre 2009
  9. a et b Description de DOE-Macsyma sur le site de l'ESTSC, anciennement NESC
  10. History of Franz Inc.
  11. The FRANZ LISP Manual, 1983, p.110
  12. Description of GCL (GNU Common Lisp) system
  13. Design and Implementation of Kyoto Common Lisp
  14. Information about MAXIMA for Common Lisp
  15. Maxima 4.155 « Copie archivée » (version du sur Internet Archive)
  16. Energy Science and Technology Software Center (ESTSC), 1995
  17. a et b Macsyma and Maxima, courrier de Richard Petti du 7 janvier 1994
  18. Copie du courrier donnant l'autorisation de redistribuer Maxima
  19. Versions de Maxima maintenues par William Schelter
  20. Maxima Code Status and Plans, James Amundson
  21. Version commerciale de Macsyma
  22. Documentation de la version commerciale, Macsyma 2.1 à 2.4
  23. MACSYMA, MAXIMA, VAXIMA, ...
  24. Code source de PUNIMAX
  25. « Changelog » de Sage
  26. Le module SYM de MAXIMA
  27. Symbolic computation with symmetric polynomials - an extension to Macsyma, Annick Valibouze, LITP, 1989
  28. wxMaxima - Getting Help

Voir aussi modifier

Sur les autres projets Wikimedia :

Articles connexes modifier

Liens externes modifier