| SAGE software | |
|---|---|
| Genere | Sistema di algebra computazionale Analisi numerica |
| Sviluppatore | Vari |
| Data prima versione | 2005 |
| Ultima versione | 10.10 (28 settembre 2026) |
| Ultima beta | 9.0.beta5 (11 novembre 2019) |
| Sistema operativo | Linux macOS Microsoft Windows |
| Linguaggio | Fortran Python C++ C Cython |
| Licenza | GPL/Varie: dipendente dai software allegati (licenza libera) |
| Sito web | www.sagemath.org/ |
SageMath (precedentemente noto come Sage o SAGE) è un programma matematico multipiattaforma adatto a risolvere problemi in diverse aree della matematica come algebra, analisi matematica, analisi numerica, calcolo combinatorio, geometria e teoria dei numeri.
La prima versione è stata pubblicata il 24 febbraio del 2005 come software libero con la licenza GNU General Public License. È nato come alternativa open source a Magma, Maple, Mathematica e MATLAB. Il primo sviluppatore del progetto SageMath, William Stein, è un matematico presso l'Università di Washington.
SageMath utilizza il linguaggio di programmazione Python e ne supporta diversi paradigmi di programmazione procedurale, programmazione funzionale e programmazione orientata agli oggetti.
SageMath è disponibile per la piattaforma Linux e Mac OS X (10.4 o superiore); è disponibile anche per Microsoft Windows, in una versione implementata per Oracle VirtualBox.


Alcune delle caratteristiche maggiori di SageMath sono:.

Durante lo sviluppo di SageMath William Stein si è reso conto che erano presenti una varietà di software matematici open-source scritti in diversi linguaggi di programmazione, come C, C++, Common Lisp, Fortran e Python.
Invece di "reinventare la ruota", SageMath (che è scritto principalmente in Python e Cython) contiene i diversi software matematici esistenti in un'unica interfaccia, per la quale la sintassi utilizzata è quella di Python. Inoltre sono state scritte centinaia di migliaia righe di codice allo scopo di aggiungere nuove funzionalità e collegare le diverse componenti.
SageMath è sviluppato da studenti e professionisti sia attraverso contributi volontari che sovvenzioni.
Nella seguente tabella sono indicati solo gli sviluppi maggiori. SageMath segue una politica dei rilasci che prevede nuovi aggiornamenti ogni poche settimane o mesi. In totale sono state effettuati più di 300 rilasci, anche se ultimamente la frequenza sta diminuendo.
| Version | Release Date | Description |
|---|---|---|
| 0.1 | Gennaio 2005 | Viene incluso PARI |
| 0.2–0.4 | Marzo-Luglio 2005 | Polinomi in più variabili, estensione della documentazione |
| 0.5–0.7 | Agosto-Settembre 2005 | Spazi Vettoriali, anelli |
| 0.8 | Ottobre 2005 | GAP, Singular |
| 0.9 | Novembre 2005 | Sono stati aggiunti Maxima e clisp |
| 1.0 | Febbraio 2006 | |
| 2.0 | Gennaio 2007 | |
| 3.0 | Aprile 2008 | Interacts, R interfaccia |
| 4.0 | Maggio 2009 | Supporto per Solaris 10 e OSX a 64bit |
| 5.0 | Maggio 2012 | Supporto per OSX Lion |
| 6.0 | Dicembre 2013 | Lo sviluppo di SageMath si è spostato su Git |
| 7.0 | Gennaio 2016 | Miglioramenti nell'interfaccia grafica |
| 8.0 | Luglio 2017 | Prima versione con supporto completo a Microsoft Windows |
La filosofia di Sage è quella di utilizzare quando disponibili le esistenti librerie open source. Quindi prende in prestito da molti progetti nella realizzazione del lavoro finale.
| Algebra | GAP, Maxima, SINGULAR |
| Geometria Algebrica | SINGULAR |
| Precisione Aritmetica Arbitraria | GMP, MPFR, MPFI, NTL |
| Geometria Aritmetica | PARI/GP, NTL, mwrank, ecm |
| Calcolo | Maxima, SymPy, GiNaC |
| Combinatorio | Symmetrica, Sage-Combinat |
| Algebra Lineare | ATLAS, BLAS, LAPACK, NumPy, LinBox, IML, GSL |
| Teoria dei Grafi | NetworkX |
| Teoria dei Gruppi | GAP |
| Calcolo numerico | GSL, SciPy, NumPy, ATLAS |
| Teoria dei Numeri | PARI/GP, FLINT, NTL |
| Calcolo statistico | R, SciPy |
| Riga di Comando | IPython |
| Database | ZODB, Python Pickles, SQLite |
| Interfaccia grafica | Sage Notebook, jsmath |
| Grafiche | Matplotlib, Tachyon3d, GD Graphics Library, Jmol |
| Linguaggio di programmazione interattivo | Python |
| Networking | Twisted |
| Geometria Differenziale e Calcolo Tensoriale | Sage Manifolds |
SageMath è un software libero, pubblicato con licenza GNU General Public License. Può essere ottenuto in diverse maniere:
x,a,b,c = var('x,a,b,c')
log(sqrt(a)).simplify_log() # returns log(a)/2
log(a/b).simplify_log() # returns log(a) - log(b)
sin(a+b).simplify_trig() # returns cos(a)*sin(b) + sin(a)*cos(b)
cos(a+b).simplify_trig() # returns cos(a)*cos(b) - sin(a)*sin(b)
(a+b)ˆ5 # returns (b + a)ˆ5
expand((a+b)ˆ5) # returns bˆ5 + 5*a*bˆ4 + 10*aˆ2*bˆ3 +
# 10*aˆ3*bˆ2 + 5*aˆ4*b + aˆ5
limit((xˆ2+1)/(2+x+3*xˆ2), x=infinity) # returns 1/3
limit(sin(x)/x, x=0) # returns 1
diff(acos(x),x) # returns -1/sqrt(1 - xˆ2)
f = exp(x)*log(x)
f.diff(x,3) # returns e^x*log(x) + 3*e^x/x - 3*e^x/x^2 + 2*e^x/x^3
solve(a*x^2 + b*x + c, x) # returns [x == (-sqrt(b^2 - 4*a*c) - b)/(2*a),
# x == (sqrt(b^2 - 4*a*c) - b)/(2*a)]
f = xˆ2 + 432/x
solve(f.diff(x)==0,x) # returns [x == 3*sqrt(3)*I - 3,
# x == -3*sqrt(3)*I - 3, x == 6]
t = var('t') # definisce la variable t
x = function('x',t) # definisce che x deve essere una funzione della variabile t
DE = lambda y: diff(y,t) + y - 1
desolve(DE(x(t)), [x,t]) # restituisce '%e^-t*(%e^t+%c)'
A = Matrix([[1,2,3],[3,2,1],[1,1,1]])
y = vector([0,-4,-1])
A.solve_right(y) # returns (-2, 1, 0)
A.eigenvalues() # returns [5, 0, -1]
B = Matrix([[1,2,3],[3,2,1],[1,2,1]])
B.inverse() # returns [ 0 1/2 -1/2]
# [-1/4 -1/4 1]
# [ 1/2 0 -1/2]
# Call numpy for the Moore-Penrose pseudo-inverse,
# since Sage does not support that yet.
import numpy
C = Matrix([[1 , 1], [2 , 2]])
matrix(numpy.linalg.pinv(C.numpy())) # returns [0.1 0.2]
# [0.1 0.2]
prime_pi(1000000) # returns 78498, the number of primes less than one million
E = EllipticCurve('389a') # construct an elliptic curve from its Cremona label
P, Q = E.gens()
7*P + Q # returns (2869/676 : -171989/17576 : 1)