\[ \def\CC{\bf C} \def\QQ{\bf Q} \def\RR{\bf R} \def\ZZ{\bf Z} \def\NN{\bf N} \]

Systèmes de calcul et SageMath#

Les systèmes de calcul (formel)#

Composants d’un Système de Calcul Formel (Computer Algebra System)#

  • Arithmétique: entiers longs, corps finis, …

  • Polynômes, fractions rationnelles, matrices, …

  • Sommations, intégration, dérivation, limites symbolique

  • Solveurs (linéaire, polynômiaux, équations différentielles, …)

  • Lien calcul numérique

  • Bases de données (nombres premiers, groupes classiques, …)

  • Langage de programmation et structures de données Multiparadigme: impératif / objet / fonctionnel Pourquoi programmer?

  • Gestion de mémoire

  • Interface avec d’autres systèmes

  • Interface utilisateur

Quelques systèmes de calcul#

Systèmes généralistes:

Systèmes spécialisés:

  • Magma

  • GAP (groupes)

  • Linbox (algèbre linéaire exacte)

  • Pari, NTL, … (théorie des nombres)

  • R (statistiques)

  • Macsima (calcul symbolique, libre)

  • Matlab (calcul numérique)

  • Scilab (calcul numérique)

  • Python scientifique (calcul numérique)

Quelques Caractéristiques communes#

Représentation arborescentes des objets, notion d’opérandes#

var('a,b,c,d,e,f,g')
F = a + b * c + d * e * sin(f)^g
F.operands()

Gestion automatique de la mémoire#

Que se passe-t’il lorsque l’on fait:

G = F
F = 0
G = 1

(comptage de références ou glaneur de cellule)

Structures de données#

Listes, ensembles et tables d’association:

liste    = [sin(1+x), 3, sin(1+x)]; liste
t    = (sin(1+x), 3, sin(1+x)); t
liste[1] = 4;
liste
t[1] = 4;
t
ensemble = { sin(1+x), 3, sin(1+x) }; ensemble
tableAssociative = { sin(1+x) : 1, 3 : 2 }
tableAssociative[sin(1+x)]

Langage de programmation#

Exécution conditionnelle, boucles, fonctions, …

Les origines de SageMath#

Années 50:#

Début de l’utilisation de l’ordinateur comme outil pour la recherche en mathématique:

  • Exploration informatique (analogue du télescope des astronomes)

  • Démonstration du théorème des quatre couleurs, …

Années 80-90:#

  • Besoin de mise en commun des développements

  • Besoin de langages de programmation de plus haut niveau

  • Apparition de systèmes spécialisés libres (GAP, …)

  • Apparition de systèmes généralistes commerciaux (Maple, …)

  • Utilisation pour l’enseignement

Années 2000:#

  • Besoin d’un système généraliste libre

  • Besoin d’un système basé sur un langage de programmation généraliste (écosystème, outils de développements, paradigmes de programmation modernes, …)

  • Besoin d’un système réutilisant et combinant les composants spécialisés libres (ex. Python scientifique)

  • 2005: William Stein lance le projet SageMath

  • 2021: SageMath est développé par des centaines enseignants, chercheurs, ingénieurs dans le monde entier