SageMath

De Wikipedia, la enciclopedia libre
(Redirigido desde «Sage»)
Saltar a: navegación, búsqueda
SageMath
Sage logo
Sage - plot.png
La interface gráfica bajo Firefox
Desarrollador(es)
William Stein (líder del proyecto) et al
sagemath.org
Información general
Lanzamiento inicial 24 de febrero de 2005
Última versión estable 7.0
19 de enero de 2016; hace 3 meses (2016-01-19)
Género Software matemático (Sistema algebraico computacional CAS)
Programado en Python, Cython
Sistema operativo GNU/Linux, Mac OS X
Licencia GNU GPL
[editar datos en Wikidata]

SageMath, conocido anteriormente como Sage, es un sistema algebraico computacional (en inglés CAS) que destaca por dos características:

  • Estar construido sobre paquetes matemáticos ya contrastados como NumPy, Sympy, PARI/GP o Maxima.
  • Acceder a la potencia combinada de los mismos a través de un lenguaje común basado en Python.

La interacción con el usuario es posible desde la interfaz de línea de comandos (basada en IPython ) o vía unos cuadernos web (Jupyter notebook) que combinan celdas de código con celdas con gráficos, texto enriquecido o fórmulas renderizadas con LaTeX.

Historia y filosofía de diseño[editar]

La primera versión de SAGE se publicó en 2005 con el objetivo inicial de recrear un pequeño subconjunto del sistema algebraico computacional Magma, y reducir así la dependencia del software matemático propietario y cerrado.[1]

William A. Stein, desarrollador de Sage

El líder del proyecto, William A. Stein, matemático en la Universidad de Washington, destacó varios factores al diseñar Sage:[2]

  • Crear una alternativa viable a Magma, Maple, Mathematica, y MATLAB, llevaría cientos, o miles de años-hombre si se empezara desde el inicio.
  • Existe una amplia gama de software matemático de código abierto bien probado, escrito en diferentes lenguajes (siendo C, C++, Fortran y Python los más comunes).

Así que en lugar de empezar desde el inicio, Sage (escrito en Python y Cython) integraría todo el software de código abierto sobre matemática ya existente en una interfaz común: un usuario necesitará saber únicamente un lenguaje bien conocido como Python.

Donde no hubiera una opción de software libre disponible para algún problema, entonces sería escrito en Sage. Pero Sage no reinventa la rueda. La misma filosofía de diseño se usa en otros programas matemáticos (como Mathematica), pero Sage puede utilizar un espectro más amplio de software, que sus contrapartes no libres, ya que las licencias propietarias imponen serias restricciones a la reutilización del software.

El desarrollo de Sage lo llevan a cabo tanto estudiantes como profesionales. Es apoyado tanto por trabajo voluntario como por donaciones.[3]

En 2007 Sage ganó el primer premio en la categoría de software científico en el Les Trophées du libre, una competición internacional de software libre.[4]

Características[editar]

Al igual que otros CAS, SageMath se divide en un núcleo que realiza los cálculos y una interfaz (a elegir) que los muestra e interacciona con el usuario.

Interfaces con el usuario[editar]

  • Existe una interfaz gráfica (notebook) para la revisión y reutilización de entradas y salidas anteriores, incluyendo gráficas y notas de texto. Realmente en 2016 conviven dos tipos de notebook: uno (SageMath worksheet) diseñado exprofeso para SageMath, con otro (Jupyter notebook) de uso más generalizado en el software científico.
  • También está disponible una línea de comandos basada en texto usando iPython que permite el control interactivo de los cálculos
sage                     # inicia interfaz de línea de comandos
sage -n                  # inicia navegador con interfaz Sagemath worksheet
sage -n jupyter          # inicia navegador con interfaz Jupyter notebook
  • La asistencia al usuario con autocompletado (TAB), consulta de documentación (EXPRESION?) o del código fuente (EXPRESION??) es posible en todas las interfaces.
  • En las interfaces de tipo notebook permite la inclusión de widgets (p.ej cajas de entrada, deslizadores) que permiten al usuario del programa interaccionar con él sin tener que modificar el código fuente. Para ello basta con aplicar el decorador @interact a una función ya definida.[5]

Lenguaje de programación[editar]

Herramientas que aglutina[editar]

Reúne y unifica bajo un solo entorno, lenguaje y jerarquía de objetos toda una colección de software matemático y trata de rellenar los huecos de funcionalidad dejados por unos y otros. Proporciona una interfaz Python a software libre especializado en distintos campos entre los que destacamos:

Campo Paquetes matemáticos distribuidos con SageMath
Álgebra GAP, Maxima, Singular
Álgebra lineal ATLAS, BLAS, LAPACK, NumPy, LinBox, IML, GSL
Álgebra lineal numérica GSL, SciPy, NumPy , ATLAS
Aritmética de precisión arbitraria GMP, MPFR, MPFI, NTL
Cálculo Maxima, Sympy, GiNaC
Combinatoria Symmetrica, Sage-Combinat
Estadística R, SciPy
Geometría algebraica SINGULAR, Macaulay2
Geometría aritmética PARI/GP, NTL, mwrank, GMP-ECM
Geometría Diferencial y Calculo Tensorial Sage Manifolds
Gráficos Matplotlib, Tachyon, GD, Jmol
Teoría de grafos NetworkX
Teoría de grupos GAP , Symmetrica
Teoría de números PARI/GP, FLINT,NTL

También proporciona interfaces a otro software no libre como Mathematica, Magma y Maple (no distribuidos con SageMath) que permite a los usuarios combinar software y comparar resultados y desempeño.

Todos estos paquetes cubren, entre otras, las funcionalidades básicas siguientes:

  • Gráficas en 2D y 3D tanto de funciones como de datos.
  • Herramientas de manipulación de datos y matrices.
  • Herramientas para visualizar y analizar gráficas
  • Filtros para importar y exportar datos, imágenes, vídeo, sonido, CAD, y GIS

Licencia y disponibilidad[editar]

SageMath es software libre, distribuido bajo los términos de la GNU General Public License versión 2 ó posterior. Está disponible de varias maneras:

Versiones en línea[editar]

  • Pueden usarse desde SageMathCloud, un servicio de computación en la nube al que se accede desde ordenadores o dispositivos móviles mediante cuentas gratuitas o de suscripción. Este servicio está disponible desde 2013.
  • Para una consulta puntual existe, desde el año 2009, una versión reducida en SageMathCell.

Instalación en el ordenador[editar]

  • Se pueden descargar binarios para GNU/Linux, OS X y Solaris (tanto x86 como SPARC). Los binarios de Solaris se consideran experimentales.
  • Un CD live que corre una versión del sistema GNU/Linux permite probar Sage sin necesidad de instalarlo.
  • Los usuarios de Windows solo pueden utilizarlo a través de software de virtualización como Virtualbox o Vmware.

Ejemplos de línea de comandos[editar]

Cálculo[editar]

x,a,b,c = var('x,a,b,c')                # en contraste con otros CAS, debemos declarar 
                                        # una variable simbólica antes de usarla  
log(sqrt(a)).simplify_log()             # devuelve log(a)/2
log(a/b).simplify_log()                 # devuelve log(a) - log(b)
sin(a+b).simplify_trig()                # devuelve cos(a)*sin(b) + sin(a)*cos(b)
cos(a+b).simplify_trig()                # devuelve cos(a)*cos(b) - sin(a)*sin(b)
(a+b)ˆ5                                 # devuelve (b + a)ˆ5
expand((a+b)ˆ5)                         # devuelve 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)  # devuelve 1/3
limit(sin(x)/x, x=0)                    # devuelve 1

diff(acos(x),x)                         # devuelve -1/sqrt(1 - xˆ2)
f = exp(x)*log(x)
f.diff(x,3)                             # devuelve 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)               # devuelve [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)                   # devuelve[x == 3*sqrt(3)*I - 3,
                                        #          x == -3*sqrt(3)*I - 3, x == 6]

Ecuaciones Diferenciales[editar]

t = var('t')                            # declara una variable simbólica t
x = function('x',t)                     # define x como función de t
DE = lambda y: diff(y,t) + y - 1
desolve(DE(x(t)), [x,t])                # devuelve '%e^-t*(%e^t+%c)'

Álgebra Lineal[editar]

A = matrix([[1,2,3],[3,2,1],[1,1,1]])
y = vector([0,-4,-1])
A.solve_right(y)                        # devuelve (-2, 1, 0)
A.eigenvalues()                         # devuelve [5, 0, -1]

B = matrix([[1,2,3],[3,2,1],[1,2,1]])
B.inverse()                             # devuelve [   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()))    # devuelve [0.1 0.2]
                                        #          [0.1 0.2]

Teoría de Números[editar]

prime_pi(1000000)                       # devuelve 78498, el número de primos 
                                        # menores que 1 millón.

E = EllipticCurve('389a')               # construye una curva elíptica  
                                        # de las tablas de  Cremona
P, Q = E.gens()
7*P + Q                                 # devuelve (2869/676 : -171989/17576 : 1)

Referencias[editar]

  1. «http://www.sagemath.org/why/stein-sd4.pdf». Archivado desde el original el 1 de diciembre de 2015. Consultado el 11 de marzo de 2008. 
  2. Stein, William (2013). «Sage: creating a viable free open source alternative to Magma, Maple, Mathematica, and MATLAB.». London Mathematical Society Lecture Note Series 403, 230-238. Consultado el 2016. 
  3. «Explicit Approaches to Modular Forms and Modular Abelian Varieties». National Science Foundation. 14 de abril de 2006. Consultado el 24 de julio de 2007. 
  4. «Free Software Brings Affordability, Transparency To Mathematics». Science Daily. 7 de diciembre de 2007. Consultado el 20 de julio de 2008. 
  5. «SageMath Interact functionality». Consultado el 11 de abril de 2008. 
  6. «The TeX Catalogue OnLine, Entry for sagetex, Ctan Edition». 

Enlaces externos[editar]