| SageMath | |
|---|---|
| Desenvolvedor | William Stein |
| Lançamento inicial | 24 de fevereiro de 2005 (21 anos) |
| Lançamento estável | 10.7
/ 9 de agosto de 2025 |
| Versão beta | 10.7beta0
/ 2 de abril de 2025 |
| Repositório | |
| Escrito em | Python, Cython |
| Sistema operacional | Multiplataforma |
| Plataforma | Python |
| Tipo | Sistema algébrico computacional |
| Licença | GNU General Public License |
| Website | sagemath.org (em inglês, em chinês, em francês, em alemão, em português e em russo)., acessado pela última vez há 262 semanas e 6 dias |
O SageMath (anteriormente Sage e SAGE, acrónimo em inglês para Sistema Algébrico e Geométrico de Experimentações) é um software de matemática que possui recursos que abrangem muitas áreas, incluindo álgebra, combinatória, análise numérica, teoria dos números e cálculo.
A primeira versão do SageMath foi lançada em 24 de fevereiro de 2005 como um software livre e de código aberto, nos termos da GNU General Public License, com o objectivo de criar uma "alternativa de código aberto a outros programas, como o Magma (sistema algébrico computacional), Maple, Mathematica e MATLAB".
O SageMath utiliza a linguagem de programação Python, suportando programações procedural, funcional e de orientação a objetos.


Entre as características do SageMath, estão:

William Stein percebeu, ao projectar o SageMath, que já havia muitos softwares de código aberto escritos em diferentes linguagens de programação, a saber, C, C++, Common Lisp, Fortran e Python.
Ao invés de reinventar a roda, o SageMath (que é escrito principalmente em Python e Cython) integra vários softwares de matemática em uma interface comum, para que um utilizador necessite saber apenas Python.
Tanto estudantes quanto profissionais auxiliam no desenvolvimento do SageMath. O desenvolvimento do SageMath é mantido por trabalhos voluntários e doações.
Apenas os maiores lançamentos estão listados abaixo. O Sage segue o conceito "liberação rápida e frequente", lançando novas versões com diferença de poucas semanas ou meses. No total, houve mais de 300 novas versões lançadas, embora a frequência de atualizações tenha diminuído.
| Versão | Data de lançamento | Descrição |
|---|---|---|
| 0.1 | Janeiro de 2005 | Inclui PARI, mas não GAP ou Singular |
| 0.2 - 0.4 | Março a Julho de 2005 | Banco de dados do Cremona, polinômios multivariados, campos finitos grandes e mais documentação |
| 0.5 - 0.7 | Agosto e Setembro de 2005 | Espaços vectoriais, anéis, símbolos modulares e janelas de utilização |
| 0.8 | Outubro de 2005 | Distribuição completa do GAP, Singular |
| 0.9 | Novembro de 2005 | Maxima e clisp adicionados |
| 1.0 | Fevereiro de 2006 | |
| 2.0 | Janeiro de 2007 | |
| 3.0 | Abril de 2008 | |
| 4.0 | Maio de 2009 | |
| 5.0 | Maio de 2012 | |
| 6.0 | Dezembro de 2013 | Desenvolvimento movido para o Git |
| 7.0 | Janeiro de 2016 | Melhorias na interface gráfica |
| 8.0 | Julho de 2017 | |
| 9.0 | Janeiro de 2020 | Conversão para Python 3 |
Em 2007, o SageMath ganhou o primeiro prémio na divisão de software científico do Les Trophées du Libre, uma competição internacional para software livre.
O SageMath também já foi citado em várias publicações.
O SageMath é software livre, distribuído sob os termos da GNU General Public License, versão 3. O programa está disponível de várias maneiras:
Embora a Microsoft estivesse patrocinando uma versão nativa do SageMath para o sistema operacional Windows, até 2012 não havia planos para o desenvolvimento de uma versão nativa, e os utilizadores do Windows têm actualmente que utilizar máquinas virtuais, como o VirtualBox, para poderem executar o SageMath.
As distribuições Linux em que o SageMath está disponível como um pacote são Ubuntu, Debian, Fedora, Arch Linux, NixOS e GNU Guix System. O SageMath pode ser instalado em qualquer distribuição Linux.
A filosofia do SageMath é a utilização de bibliotecas de softwares de código aberto, onde quer que existam. Por isso, utiliza muitas bibliotecas de outros projectos.
| Álgebra | GAP, Maxima, Singular, Macaulay 2 |
| Geometria algébrica | Singular, Macaulay 2 |
| Aritmética de precisão arbitrária | MPIR, MPFR, MPFI, NTL, mpmath |
| Geometria aritmética | PARI/GP, NTL, mwrank, ecm |
| Cálculo | Maxima, SymPy, GiNaC |
| Combinatória | Symmetrica, Sage-Combinat |
| Álgebra linear | ATLAS, BLAS, LAPACK, NumPy, LinBox, IML, GSL |
| Teoria dos gráficos | NetworkX |
| Teoria dos grupos | GAP |
| Computação numérica | GSL, SciPy, NumPy, ATLAS, Scilab, GNU Octave |
| Teoria dos números | PARI/GP, FLINT, NTL, Kash/Kant |
| Computação estatística | R, SciPy |
| Shell da linha de comando | IPython |
| Banco de dados | ZODB, Python pickles, SQLite |
| Configuração do tipo de matemática | LaTeX |
| Interface gráfica | Sage Notebook, jsmath |
| Gráficos | Matplotlib, Tachyon3d, GD, Jmol |
| Linguagem de programação interativa | Python |
| Rede | Twisted |
x, a, b, c = var('x, a, b, c')
log(sqrt(a)).simplify_log() # returns 1/2*log(a)
log(a / b).expand_log() # returns log(a) - log(b)
sin(a + b).simplify_trig() # returns sin(a)*cos(b) + sin(b)*cos(a)
cos(a + b).simplify_trig() # returns -sin(a)*sin(b) + cos(a)*cos(b)
(a + b)^5 # returns (a + b)^5
expand((a + b) ^ 5) # a^5 + 5*a^4*b + 10*a^3*b^2 + 10*a^2*b^3 + 5*a*b^4 + b^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(-x^2 + 1)
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 == -1/2*(b + sqrt(-4*a*c + b^2))/a, x == -1/2*(b - sqrt(-4*a*c + b^2))/a]
f = x ^ 2 + 432 / x
solve(f.diff(x) == 0, x) # returns [x == 3*I*sqrt(3) - 3, x == -3*I*sqrt(3) - 3, x == 6]
t = var('t') # define a variable t
x = function('x', t) # define x to be a function of that variable
DE = lambda y: diff(y, t) + y - 1
desolve(DE(x(x=t)), [x, t]) # returns (c + e^t)*e^(-t)
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 (24187731458439253/244328192262001 : 3778434777075334029261244/3819094217575529893001 : 1)
|url= (ajuda). Consultado em 17 de abril de 2012 Link web