SageMath

SageMath
DesenvolvedorWilliam Stein
Lançamento inicial24 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 emPython, Cython
Sistema
operacional
Multiplataforma
PlataformaPython
TipoSistema algébrico computacional
LicençaGNU General Public License
Websitesagemath.org (em inglês, em chinês, em francês, em alemão, em português e em russo)., acessado pela última vez há 234 semanas e 3 dias

O SageMath (anteriormente Sage e SAGE, acrónimo em inglês para Sistema Algébrico e Geométrico de Experimentações[1]) é 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".[2]

O SageMath utiliza a linguagem de programação Python, suportando programações procedural, funcional e de orientação a objetos.

Características

A interface gráfica do SageMath funciona como a maioria dos navegadores web
Resolução de equações e de diagramação utilizando a interface web do SageMath

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

  • Uma interface gráfica para revisão e reutilização de entradas e saídas anteriores, incluindo gráficos e anotações de texto. Compatível com os navegadores Firefox, Opera, Konqueror e Safari. Os cadernos podem ser acessados localmente ou remotamente, e a conexão pode ser assegurada com HTTPS.
  • Um interpretador de comandos baseado em texto usando IPython.
  • Computação paralela, usando processadores multinúcleo, multiprocessamento simétrico e computação distribuída.
  • Cálculo, usando Maxima e SymPy.
  • Álgebra linear numérica, usando GNU Scientific Library, SciPy e NumPy.
  • Bibliotecas de funções elementares e especiais.
  • Gráficos 2D e 3D de funções simbólicas e dados numéricos.
  • Manipulação de matrizes, incluindo matrizes esparsas.
  • Bibliotecas de estatísticas multivariáveis, usando R e SciPy.
  • Uma caixa de ferramentas para acrescentar interfaces do utilizador a cálculos e aplicações.
  • Ferramentas para o processamento de imagens, usando pylab e Python.
  • Ferramentas para visualizar e analisar gráficos.
  • Bibliotecas para funções de teoria dos números.
  • Filtros para importação e exportação de dados, imagens, vídeo, áudio, CAD e GIS.
  • Suporte para números complexos, aritmética de precisão arbitrária e matemática simbólica, sempre que isto for apropriado.
  • MoinMoin como um sistema Wiki, para gestão do conhecimento.
  • Documentação, usando Sphinx.
  • Interface para alguns softwares proprietários, como o Mathematica, Magma (sistema algébrico computacional) e Maple.

Desenvolvimento

William Stein, desenvolvedor do Sage

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.[4]
Tanto estudantes quanto profissionais auxiliam no desenvolvimento do SageMath. O desenvolvimento do SageMath é mantido por trabalhos voluntários e doações.[5]

Histórico de lançamentos

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

VersãoData de lançamentoDescrição
0.1Janeiro de 2005Inclui PARI, mas não GAP ou Singular
0.2 - 0.4Março a Julho de 2005Banco de dados do Cremona, polinômios multivariados, campos finitos grandes e mais documentação
0.5 - 0.7Agosto e Setembro de 2005Espaços vectoriais, anéis, símbolos modulares e janelas de utilização
0.8Outubro de 2005Distribuição completa do GAP, Singular
0.9Novembro de 2005Maxima e clisp adicionados
1.0Fevereiro de 2006
2.0Janeiro de 2007
3.0Abril de 2008
4.0Maio de 2009
5.0Maio de 2012
6.0Dezembro de 2013Desenvolvimento movido para o Git
7.0Janeiro de 2016Melhorias na interface gráfica
8.0Julho de 2017
9.0Janeiro de 2020Conversão para Python 3

Conquistas

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

O SageMath também já foi citado em várias publicações.[8][9]

Licença e disponibilidade

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,[10] 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.[11]
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.

Pacotes de software contidos no SageMath

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.

Pacotes de matemática contidos no SageMath
ÁlgebraGAP, Maxima, Singular, Macaulay 2
Geometria algébricaSingular, Macaulay 2
Aritmética de precisão arbitráriaMPIR, MPFR, MPFI, NTL, mpmath
Geometria aritméticaPARI/GP, NTL, mwrank, ecm
CálculoMaxima, SymPy, GiNaC
CombinatóriaSymmetrica, Sage-Combinat
Álgebra linearATLAS, BLAS, LAPACK, NumPy, LinBox, IML, GSL
Teoria dos gráficosNetworkX
Teoria dos gruposGAP
Computação numéricaGSL, SciPy, NumPy, ATLAS, Scilab, GNU Octave
Teoria dos númerosPARI/GP, FLINT, NTL, Kash/Kant
Computação estatísticaR, SciPy
Outros pacotes contidos no SageMath
Shell da linha de comandoIPython
Banco de dadosZODB, Python pickles, SQLite
Configuração do tipo de matemáticaLaTeX
Interface gráficaSage Notebook, jsmath
GráficosMatplotlib, Tachyon3d, GD, Jmol
Linguagem de programação interativaPython
RedeTwisted

Exemplos de utilização

Álgebra e cálculo

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]

Equações diferenciais

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)

Álgebra linear

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]'''

Teoria dos números

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)

Ver também

Referências

  1. William Stein. «SAGE: A Computer System for Algebra and Geometry Experimentation». Consultado em 16 de abril de 2012
  2. William Stein. «Sage Days 4» (PDF). Arquivado a partir do ficheiro originalem 30 de março de 2012. Consultado em 16 de abril de 2012
  3. «SageMath - Documentação de Ajuda». Consultado em 16 de abril de 2012
  4. «Sage Days 7: Combinatorics». 14 de novembro de 2008. Consultado em 17 de abril de 2012
  5. «www.sagemath.org/development-ack.html». Consultado em 17 de abril de 2012
  6. SageMath. «Sage Download - src-old». Consultado em 17 de abril de 2012
  7. Science Daily (6 de dezembro de 2007). «Free Software Brings Affordability, Transparency To Mathematics». Consultado em 17 de abril de 2012
  8. SageMath. «Publications Citing Sage». Consultado em 17 de abril de 2012
  9. SageMath. «Publications Citing Sage-Combinat». Consultado em 17 de abril de 2012
  10. name="sage_development"
  11. William Stein (16 de março de 2012). «Re: Question about Sage» Verifique valor |url= (ajuda). Consultado em 17 de abril de 2012 Link web

Ligações externas