Introduction
Sage est un système de calcul formel open-source gratuit, intégrant plus de 150 paquets mathématiques comme GAP, Maxima ou Singular, surpassant Mathematica pour les experts en recherche. En 2026, avec Sage 10.4+, il excelle en algèbre commutative, géométrie algébrique et simulations quantiques, grâce à son kernel Python étendu et son support Jupyter natif.
Pourquoi l'adopter ? Pour des calculs exacts à l'échelle (matrices 10000x10000 sans crash), des preuves formelles automatisées et une interopérabilité totale (export LaTeX, Cython pour perf x100). Ce tutoriel expert vous guide de l'installation aux groupes finis, avec codes copiables pour vos projets pros. Imaginez résoudre un système non-linéaire en 3 lignes au lieu de 300 en NumPy. Prêt à booster vos maths ? (128 mots)
Prérequis
- SageMath 10.4+ (standalone, pas besoin de Python séparé)
- JupyterLab pour notebooks interactifs
- Notions avancées : anneaux, corps, variétés algébriques
- 8 Go RAM minimum pour matrices grandes
- OS : Linux/Mac préférés (Windows via WSL2)
Installation via binaire
#!/bin/bash
wget https://github.com/sagemath/sage/releases/download/10.4/sage-10.4-Ubuntu_22.04-x86_64.tar.bz2
tar -xjf sage-10.4-Ubuntu_22.04-x86_64.tar.bz2
cd sage-10.4-Ubuntu_22.04-x86_64/
make
# Ajout au PATH
echo 'export PATH=$PATH:$(pwd)/bin' >> ~/.bashrc
source ~/.bashrc
# Test
sage -c 'print(2^100)'Ce script télécharge, compile et configure Sage 10.4 pour Ubuntu 22.04. Le make prend 30-60 min ; évitez les proxies sans http_proxy. Testez avec 2^100 pour vérifier l'arithmétique exacte.
Premier notebook Jupyter
Lancez sage -n jupyterlab pour ouvrir l'interface. Créez un notebook .sws (Sage Worksheet). Sage étend Python : variables symboliques via var('x'), plots vectoriels. Analogie : comme un GPS mathématique, il trace routes exactes là où NumPy approxime.
Calculs symboliques basiques
var('x y z')
f = x^3 + sin(y) * exp(z)
print(f.simplify())
print(integrate(f, x))
print(f.series(x, 0, 5))
# Résolution exacte
solve([x^2 + y == 1, x - y == 2], [x, y])Déclarez des variables symboliques, simplifiez x^3 + sin(y)exp(z), intégrez et développez en série de Taylor. solve résout exactement le système, contrairement à numpy.linalg.solve qui numérise. Piège : oubliez var() et tout reste numérique.
Algèbre linéaire avancée
Passez aux matrices sur corps finis ou rationnels. Sage gère décompositions Smith (pour réseaux cristallins) ou Jordan, idéales en physique quantique.
Matrices et décompositions
R = QQ # Corps rationnels
M = Matrix(R, [[1,2,3],[0,5,6],[0,0,7]])
print(M.echelon_form())
print(M.Jordan_form())
# Inverse exacte
print(M.inverse())
# Déterminant sur entiers
N = Matrix(ZZ, [[2,3],[5,7]])
print(N.det())Créez une matrice triangulaire sur ℚ, appliquez formes échelonnée/Jordan et inverse exacte. Sur ℤ, det() donne -1 sans flottants. Évitez GF(p) sans R=GF(prime) pour modularité.
Calcul différentiel et intégral
Sage excelle en EDO/EDS avec desolve, ou intégrales elliptiques via Maxima. Pour experts : systèmes non-linéaires avec conditions aux limites.
Équations différentielles
var('t')
y = function('y')(t)
de = diff(y(t), t, 2) + y(t)
print(desolve(de, y(t)))
# Système non-linéaire
u = function('u')(t)
v = function('v')(t)
sys = [diff(u,t)==v, diff(v,t)==-u]
print(desolve(sys, [u(t), v(t)]))
# Plot solution
p = plot(sin(t), (t,0,2*pi)); p.save('oscillateur.png')Résolvez l'équation du oscillateur harmonique et un système pendule. desolve donne solutions exactes cos/sin. Sauvegardez le plot pour rapports. Piège : ics pour conditions initiales si non-homogène.
Algèbre abstraite : groupes
Explorez groupes finis via GAP intégré, pour cryptographie ou physique des particules. Analogie : Sage comme un labo virtuel pour tester conjectures.
Groupes et anneaux
G = AlternatingGroup(5)
print(G.order())
print(G.conjugacy_classes())
# Sous-groupe
H = G.sylow_subgroup(2)
print(H.order())
# Anneau polynomial
R.<x> = PolynomialRing(QQ)
I = R.ideal([x^2-2, x^3-3])
print(I.groebner_basis()Générez A5 (ordre 60), classes de conjugaison et sous-groupe de Sylow. Pour variétés : base de Gröbner sur ℚ[x]. Évitez libgap() sans load('gap') pour perf.
Géométrie et plots 3D
Visualisez tore ou surfaces implicites. Sage exporte en POV-Ray pour rendus pro.
Plots avancés 3D
var('u v')
tore = parametric_plot3d(( (2+cos(u))*cos(v), (2+cos(u))*sin(v), sin(u) ), (u,0,2*pi), (v,0,2*pi), color='red')
tore.save('tore.png')
# Surface implicite
S = implicit_plot3d(x^2 + y^2 - z^2 == 1, (x,-2,2), (y,-2,2), (z,-2,2))
S.show()Tracez un tore paramétrique et cône hyperboloïde implicite. save() pour PNG/SVG. Piège : échelles (x,a,b) mal adaptées causent artefacts ; testez plot3d? pour options.
Optimisation avec Cython
Pour perf : compilez boucles en C via %cython. Gain x50 sur Monte-Carlo.
Cython pour simulations
%cython
cpdef long fib(long n):
cdef long a=0, b=1, i
for i in range(n):
a, b = b, a+b
return a
print(fib(1000)) # Fibonacci 1000e, instantané
# Monte-Carlo pi
cpdef double pi_monte(int n):
cdef double x,y,s=0
cdef int i
for i in range(n):
x = random()
y = random()
if x*x + y*y <=1: s+=1
return 4*s/n
print(pi_monte(10**7))Compilez Fibonacci récursif (n=1000 OK) et Monte-Carlo pour π (10M itérations <1s). cpdef expose aux scripts Sage. Évitez def pur Python (x100 plus lent).
Bonnes pratiques
- Utilisez toujours domaines précis :
QQpour exact,RDFpour flottants rapides. - Profilez avec
%timeitetcythonizepour >10^6 ops. - Sauvegardez sessions :
save('mon_projet.sobj'); rechargez avecload(). - Intégrez Git :
.sagefiles +sage --preparsepour type hints. - Parallélisez :
@parallelsur clusters SLURM pour matrices géantes.
Erreurs courantes à éviter
- Oublier
var(): tout passe en numérique, faux résultats symboliques. - Matrices sans
Matrix(R, ...): défaut ℤ cause overflow. - Plots sans bounds : rendus vides ; toujours
(var,min,max). - Cython sans
cdef: gain nul, faux sentiment de vitesse.
Pour aller plus loin
- Docs officielles : Sage Reference
- GAP pour groupes :
sage -gap - Formations expertes : Learni Group Formations
- Communauté : forums.sagemath.org pour cas exotiques comme schémas.
- Projet : implémentez Z3 via Sage pour crypto post-quantique.