SymPy es una biblioteca de código abierto de Python para computación simbólica . Proporciona capacidades de álgebra computacional ya sea como una aplicación independiente, como una biblioteca para otras aplicaciones o en vivo en la web como SymPy Live [2] o SymPy Gamma. [3] SymPy es fácil de instalar e inspeccionar porque está escrito completamente en Python con pocas dependencias. [4] [5] [6] Esta facilidad de acceso combinada con una base de código simple y extensible en un lenguaje bien conocido hacen de SymPy un sistema de álgebra computacional con una barrera de entrada relativamente baja.
SymPy incluye funciones que van desde la aritmética simbólica básica hasta el cálculo , el álgebra , las matemáticas discretas y la física cuántica . Es capaz de formatear el resultado de los cálculos como código LaTeX . [4] [5]
SymPy es un software libre y está licenciado bajo la licencia New BSD . Los desarrolladores principales son Ondřej Čertík y Aaron Meurer. Fue iniciado en 2005 por Ondřej Čertík. [7]
Características
La biblioteca SymPy se divide en un núcleo con muchos módulos opcionales.
Actualmente, el núcleo de SymPy tiene alrededor de 260.000 líneas de código [8] (también incluye un conjunto completo de pruebas automáticas: más de 100.000 líneas en 350 archivos a partir de la versión 0.7.5), y sus capacidades incluyen: [4] [5] [9] [10] [11]
Capacidades básicas
- Aritmética básica: *, /, +, -, **
- Simplificación
- Expansión
- Funciones : trigonométricas , hiperbólicas , exponenciales , raíces , logaritmos , valor absoluto , armónicos esféricos , funciones factoriales y gamma , funciones zeta , polinomios , hipergeométricas , funciones especiales, etc.
- Sustitución
- Números enteros , racionales y de punto flotante de precisión arbitraria
- Símbolos no conmutativos
- Coincidencia de patrones
Polinomios
- Aritmética básica: división , mcd , etc.
- Factorización
- Factorización libre de cuadrados
- Bases de Gröbner
- Descomposición en fracciones parciales
- Resultantes
Cálculo
- Límites
- Diferenciación
- Integración : Heurística Risch-Norman implementada
- Serie de Taylor ( serie de Laurent )
Resolver ecuaciones
- Sistemas de ecuaciones lineales
- Sistemas de ecuaciones algebraicas que se pueden resolver mediante radicales
- Ecuaciones diferenciales
- Ecuaciones diferenciales
Matemáticas discretas
- Coeficientes binomiales
- Sumas
- Productos
- Teoría de números : generación de números primos , pruebas de primalidad, factorización de números enteros , etc.
- Expresiones lógicas [12]
Matrices
- Aritmética básica
- Valores propios y sus vectores propios cuando el polinomio característico es solucionable mediante radicales
- Determinantes
- Inversión
- Resolviendo
Geometría
Trazando
Tenga en cuenta que para trazar gráficos se requiere el módulo externo Matplotlib o Pyglet .
- Modelos de coordenadas
- Trazado de entidades geométricas
- 2D y 3D
- Interfaz interactiva
- Bandera
- Animaciones
Física
- Unidades
- Mecánica clásica
- Mecánica del medio continuo [13]
- Mecánica cuántica
- Óptica gaussiana
- Control lineal
Estadística
Combinatoria
- Permutaciones
- Combinaciones
- Particiones
- Subconjuntos
- Grupo de permutación : poliédrico , de Rubik, simétrico , etc.
- Secuencia de Prufer y códigos de Gray
Impresión
- Impresión bonita : Impresión bonita ASCII / Unicode , LaTeX
- Generación de código : C, Fortran , Python
Proyectos relacionados
- SageMath : una alternativa de código abierto a Mathematica , Maple , MATLAB y Magma (SymPy está incluido en Sage)
- SymEngine: una reescritura del núcleo de SymPy en C++ , con el fin de aumentar su rendimiento. Actualmente se está trabajando para que SymEngine sea también el motor subyacente de Sage. [14]
- mpmath: una biblioteca de Python para aritmética de punto flotante de precisión arbitraria [15]
- SympyCore: otro sistema de álgebra computacional en Python [16]
- SfePy: Software para la resolución de sistemas de ecuaciones diferenciales parciales (EDP) acopladas mediante el método de elementos finitos en 1D, 2D y 3D. [17]
- GAlgebra: módulo de álgebra geométrica (anteriormente sympy.galgebra). [18]
- Quameon: Monte Carlo cuántico en Python. [19]
- Lcapy: Paquete experimental de Python para la enseñanza del análisis de circuitos lineales . [20]
- Proyecto de expresión LaTeX: composición tipográfica sencilla en LaTeX de expresiones algebraicas en forma simbólica con sustitución automática y cálculo de resultados. [21]
- Modelado estadístico simbólico: adición de operaciones estadísticas a modelos físicos complejos. [22]
- Diofant: una bifurcación de SymPy, iniciada por Sergey B Kirpichev [23]
Dependencias
Desde la versión 1.0, SymPy tiene el paquete mpmath como dependencia.
Hay varias dependencias opcionales que pueden mejorar sus capacidades:
- gmpy: si gmpy está instalado, el módulo polinomial de SymPy lo utilizará automáticamente para tipos de terreno más rápidos. Esto puede proporcionar un aumento de varias veces en el rendimiento de ciertas operaciones.
- matplotlib : si matplotlib está instalado, SymPy puede usarlo para trazar gráficos.
- Pyglet : paquete de gráficos alternativos.
Ejemplos de uso
Impresión bonita
Sympy permite formatear las salidas en un formato más atractivo a través de la pprintfunción. Alternativamente, el init_printing()método habilitará la impresión bonita, por lo que pprintno es necesario llamarlo. La impresión bonita utilizará símbolos Unicode cuando estén disponibles en el entorno actual; de lo contrario, recurrirá a caracteres
ASCII .
>>> from sympy import pprint , init_printing , Símbolo , sin , cos , exp , sqrt , serie , Integral , Función
>>>
>>> x = Símbolo ( "x" )
>>> y = Símbolo ( "y" )
>>> f = Función ( "f" )
>>> # pprint usará Unicode de manera predeterminada si está disponible
>>> pprint ( x ** exp ( x ))
⎛ x⎞
⎝ℯ ⎠
x
>>> # Una salida sin Unicode
>>> pprint ( Integral ( f ( x ), x ), use_unicode = False )
/
|
| f(x) dx
|
/
>>> # Comparar con la misma expresión pero esta vez Unicode está habilitado
>>> pprint ( Integral ( f ( x ), x ), use_unicode = True )
⌠
⎮ f(x) dx
⌡
>>> # Alternativamente, puede llamar a init_printing() una vez y realizar una impresión bonita sin la función pprint.
>>> init_printing ()
>>> sqrt ( sqrt ( exp ( x )))
____
4 ╱ x
╲╱ ℯ
>>> ( 1 / cos ( x )) . serie ( x , 0 , 10 )
2 4 6 8
x 5⋅x 61⋅x 277⋅x ⎛ 10⎞
1 + ── + ──── + ───── + ────── + O⎝x ⎠
2 24 720 8064
Expansión
>>> from sympy import init_printing , Símbolo , expandir
>>> init_printing ()
>>>
>>> a = Símbolo ( "a" )
>>> b = Símbolo ( "b" )
>>> e = ( a + b ) ** 3
>>> e
(a + b)³
>>> e . expand ()
a³ + 3⋅a²⋅b + 3⋅a⋅b² + b³
Ejemplo de precisión arbitraria
>>> de sympy importar Racional , pprint
>>> e = 2 ** 50 / Racional ( 10 ) ** 50
>>> pprint ( e )
1/88817841970012523233890533447265625
Diferenciación
>>> from sympy import init_printing , símbolos , ln , diff
>>> init_printing ()
>>> x , y = símbolos ( "x y" )
>>> f = x ** 2 / y + 2 * x - ln ( y )
>>> diff ( f , x )
2⋅x
─── + 2
y
>>> diff ( f , y )
2
x 1
- ── - ─
2 y
y
>>> diff ( diff ( f , x ), y )
-2⋅x
────
2
y
Trazando

>>> de sympy importar símbolos , cos
>>> de sympy.plotting importar plot3d
>>> x , y = símbolos ( "x y" )
>>> plot3d ( cos ( x * 3 ) * cos ( y * 5 ) - y , ( x , - 1 , 1 ), ( y , - 1 , 1 ))
<sympy.plotting.plot.Plot objeto en 0x3b6d0d0>
Límites
>>> from sympy import init_printing , Símbolo , límite , raíz cuadrada , oo
>>> init_printing ()
>>>
>>> x = Símbolo ( "x" )
>>> límite ( raíz cuadrada ( x ** 2 - 5 * x + 6 ) - x , x , oo )
-5/2
>>> límite ( x * ( raíz cuadrada ( x ** 2 + 1 ) - x ), x , oo )
1/2
>>> límite ( 1 / x ** 2 , x , 0 )
∞
>>> límite ((( x - 1 ) / ( x + 1 )) ** x , x , oo )
-2
ℯ
Ecuaciones diferenciales
>>> from sympy import init_printing , Símbolo , Función , Eq , dsolve , sin , diff
>>> init_printing ()
>>>
>>> x = Símbolo ( "x" )
>>> f = Función ( "f" )
>>>
>>> eq = Eq ( f ( x ) . diff ( x ), f ( x ))
>>> eq
d
──(f(x)) = f(x)
dx
>>>
>>> dsolve ( eq , f ( x ))
x
f(x) = C₁⋅ℯ
>>>
>>> eq = Eq ( x ** 2 * f ( x ) . diff ( x ), - 3 * x * f ( x ) + sen ( x ) / x )
>>> eq
2 d sen(x)
x ⋅──(f(x)) = -3⋅x⋅f(x) + ──────
dx x
>>>
>>> dsolve ( eq , f ( x ))
C₁ - cos(x)
f(x) = ───────────
x³
Integración
>>> from sympy import init_printing , integrate , Symbol , exp , cos , erf
>>> init_printing ()
>>> x = Symbol ( "x" )
>>> # Función polinómica
>>> f = x ** 2 + x + 1
>>> f
2
x + x + 1
>>> integrate ( f , x )
3 2
xx
── + ── + x
3 2
>>> # Función racional
>>> f = x / ( x ** 2 + 2 * x + 1 )
>>> f
x
────────────
2
x + 2⋅x + 1
>>> integrar ( f , x )
1
log(x + 1) + ─────
x + 1
>>> # Funciones polinomiales exponenciales
>>> f = x ** 2 * exp ( x ) * cos ( x )
>>> f
2 x
x ⋅ℯ ⋅cos(x)
>>> integrar ( f , x )
2 x 2 xxx
x ⋅ℯ ⋅sin(x) x ⋅ℯ ⋅cos(x) x ℯ ⋅sin(x) ℯ ⋅cos(x)
──────────── + ──────────── - x⋅ℯ ⋅sin(x) + ───────── - ─────────
2 2 2 2
>>> # Una integral no elemental
>>> f = exp ( - ( x ** 2 )) * erf ( x )
>>> f
2
-x
ℯ ⋅erf(x)
>>> integrate ( f , x )
___ 2
╲╱ π ⋅erf (x)
─────────────
4
Serie
>>> de sympy import Símbolo , cos , sin , pprint
>>> x = Símbolo ( "x" )
>>> e = 1 / cos ( x )
>>> pprint ( e )
1
──────
cos (x)
>>> pprint ( e . serie ( x , 0 , 10 ))
2 4 6 8
x 5⋅x 61⋅x 277⋅x ⎛ 10⎞
1 + ── + ──── + ──── ─ + ────── + O⎝x ⎠
2 24 720 8064
>>> e = 1 / sin ( x )
>>> pprint ( e )
1
──────
sin(x)
>>> pprint ( e . serie ( x , 0 , 4 ))
3
1 x 7⋅x ⎛ 4⎞
─ + ─ + ──── + O⎝x ⎠
x6 360
Razonamiento lógico
Ejemplo 1
>>> from sympy import *
>>> x = Símbolo ( "x" )
>>> y = Símbolo ( "y" )
>>> hechos = Q . positivo ( x ), Q . positivo ( y )
>>> con suponiendo ( * hechos ):
... print ( ask ( Q . positivo ( 2 * x + y )))
Verdadero
Ejemplo 2
>>> from sympy import *
>>> x = Symbol ( "x" )
>>> # Suposición sobre x
>>> fact = [ Q . prime ( x )]
>>> con suposición ( * fact ):
... print ( ask ( Q . reasonal ( 1 / x )))
Verdadero
Véase también
Referencias
- ^ "Lanzamientos - sympy/sympy" . Consultado el 6 de septiembre de 2022 – vía GitHub .
- ^ "SymPy Live". live.sympy.org . Consultado el 25 de agosto de 2021 .
- ^ "SymPy Gamma". www.sympygamma.com . Consultado el 25 de agosto de 2021 .
- ^ abc "Página de inicio de SymPy" . Consultado el 13 de octubre de 2014 .
- ^ abc Joyner, David; Čertík, Ondřej; Meurer, Aaron; Granger, Brian E. (2012). "Sistemas de álgebra computacional de código abierto: SymPy". ACM Communications in Computer Algebra . 45 (3/4): 225–234. doi :10.1145/2110170.2110185. S2CID 44862851.
- ^ Meurer, Aarón; Smith, Christopher P.; Paprocki, Mateusz; Čertík, Ondřej; Kirpichev, Sergey B.; Rocklin, Mateo; Kumar, AMiT; Ivanov, Sergio; Moore, Jason K. (2 de enero de 2017). "SymPy: computación simbólica en Python" (PDF) . PeerJ Ciencias de la Computación . 3 : e103. doi : 10.7717/peerj-cs.103 . ISSN 2376-5992.
- ^ "SymPy frente a Mathematica · sympy/Wiki de Sympy". GitHub .
- ^ "Estadísticas del proyecto Sympy en Open HUB" . Consultado el 13 de octubre de 2014 .
- ^ Gede, Gilbert; Peterson, Dale L.; Nanjangud, Angadh; Moore, Jason K.; Hubbard, Mont (2013). Dinámica multicuerpo restringida con Python: desde la generación de ecuaciones simbólicas hasta la publicación . Conferencias técnicas internacionales de ingeniería de diseño y computación e información en ingeniería de la ASME 2013. Sociedad Estadounidense de Ingenieros Mecánicos. pp. V07BT10A051. doi :10.1115/DETC2013-13470. ISBN . 978-0-7918-5597-3.
- ^ Rocklin, Matthew; Terrel, Andy (2012). "Estadísticas simbólicas con SymPy". Computing in Science & Engineering . 14 (3): 88–93. Bibcode :2012CSE....14c..88R. doi :10.1109/MCSE.2012.56. S2CID 18307629.
- ^ Asif, Mushtaq; Olaussen, Kåre (2014). "Generador automático de código para integradores de orden superior". Computer Physics Communications . 185 (5): 1461–1472. arXiv : 1310.2111 . Código Bibliográfico :2014CoPhC.185.1461M. doi :10.1016/j.cpc.2014.01.012. S2CID 42041635.
- ^ "Módulo de suposiciones — documentación de SymPy 1.4". docs.sympy.org . Consultado el 5 de julio de 2019 .
- ^ "Mecánica del continuo: documentación de SymPy 1.4" . docs.sympy.org . Consultado el 5 de julio de 2019 .
- ^ "GitHub - symengine/symengine: SymEngine es una biblioteca de manipulación simbólica rápida, escrita en C++". GitHub . Consultado el 25 de agosto de 2021 .
- ^ "mpmath - Biblioteca de Python para aritmética de punto flotante de precisión arbitraria". mpmath.org . Consultado el 25 de agosto de 2021 .
- ^ "GitHub - pearu/sympycore: Exportado automáticamente desde code.google.com/p/sympycore". GitHub . Enero de 2021 . Consultado el 25 de agosto de 2021 .
- ^ Desarrolladores, SfePy. «SfePy: Elementos finitos simples en Python — Versión de SfePy: documentación 2021.2+git.13ca95f1». sfepy.org . Consultado el 25 de agosto de 2021 .
- ^ "GitHub - pygae/galgebra: paquete de cálculo/álgebra geométrica simbólica para SymPy". GitHub . Consultado el 25 de agosto de 2021 .
- ^ "Quameon - Monte Carlo cuántico en Python". quameon.sourceforge.net . Consultado el 25 de agosto de 2021 .
- ^ "¡Bienvenido a la documentación de Lcapy! — Documentación de Lcapy 0.76". 2021-01-16. Archivado desde el original el 2021-01-16 . Consultado el 2021-08-25 .
- ^ "Documentación del proyecto LaTeX Expression — Documentación de LaTeX Expression 0.3.dev". mech.fsv.cvut.cz . Consultado el 25 de agosto de 2021 .
- ^ "Estadísticas simbólicas con SymPy". ResearchGate . Consultado el 25 de agosto de 2021 .
- ^ "Documentación de Diofant — Documentación de Diofant 0.13.0a4.dev13+g8c5685115". diofant.readthedocs.io . Consultado el 25 de agosto de 2021 .
Enlaces externos
- Sitio web oficial
- Planeta SymPy
- Colección de tutoriales de SymPy
- Repositorio de código en GitHub
- Foro de soporte y desarrollo
- Sala de chat de Gitter