SymPy es una biblioteca de Python de código abierto para el cálculo simbólico . Proporciona capacidades de álgebra informática como una aplicación independiente, como una biblioteca para otras aplicaciones o en vivo en la web como SymPy Live o SymPy Gamma . SymPy es fácil de instalar e inspeccionar porque está escrito completamente en Python con pocas dependencias. [2] [3] [4] 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.
Desarrollador (es) | Equipo de desarrollo de SymPy |
---|---|
Versión inicial | 2007 |
Lanzamiento estable | 1.6.2 [1] / 9 de agosto de 2020 |
Repositorio | |
Escrito en | Pitón |
Sistema operativo | Multiplataforma |
Tipo | Sistema de álgebra informática |
Licencia | Nueva licencia BSD |
Sitio web | www |
SymPy incluye características que van desde aritmética simbólica básica hasta cálculo , álgebra , matemáticas discretas y física cuántica . Es capaz de formatear el resultado de los cálculos como código LaTeX . [2] [3]
SymPy es un software gratuito y tiene la licencia Nueva BSD . Los desarrolladores principales son Ondřej Čertík y Aaron Meurer. Fue iniciado en 2005 por Ondřej Čertík. [5]
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 [6] (también incluye un conjunto completo de autopruebas: más de 100.000 líneas en 350 archivos a partir de la versión 0.7.5), y sus capacidades incluyen: [2] [3 ] [7] [8] [9]
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, ...
- Sustitución
- Enteros , racionales y flotantes de precisión arbitraria
- Símbolos no conmutativos
- La coincidencia de patrones
Polinomios
- Aritmética básica: división , mcd , ...
- Factorización
- Factorización libre de cuadrados
- Bases Gröbner
- Descomposición de fracción parcial
- Resultantes
Cálculo
- Limites
- Diferenciación
- Integración : heurística Risch-Norman implementada
- Serie Taylor ( serie Laurent )
Resolver ecuaciones
- Sistemas de ecuaciones lineales
- Sistemas de ecuaciones algebraicas que se pueden resolver mediante radicales
- Ecuaciones diferenciales
- Ecuaciones de diferencia
Matemáticas discretas
- Coeficientes binomiales
- Sumas
- Productos
- Teoría de números : generación de números primos , pruebas de primalidad, factorización de enteros , ...
- Expresiones lógicas [10]
Matrices
- Aritmética básica
- Autovalores y sus autovectores cuando el polinomio característico se puede resolver por radicales
- Determinantes
- Inversión
- Resolviendo
Geometría
- Puntos , líneas , rayos , segmentos , elipses , círculos , polígonos , ...
- Intersecciones
- Tangencia
- Semejanza
Graficado
Tenga en cuenta que el trazado requiere el módulo externo matplotlib o Pyglet .
- Coordinar modelos
- Trazado de entidades geométricas
- 2D y 3D
- Interfaz interactiva
- Colores
- Animaciones
Física
- Unidades
- Mecanica clasica
- Mecánica de continuo [11]
- Mecánica cuántica
- Óptica gaussiana
- Álgebra de Pauli
Estadísticas
- Distribuciones normales
- Distribuciones uniformes
- Probabilidad
Combinatoria
- Permutaciones
- Combinaciones
- Particiones
- Subconjuntos
- Grupo de permutación : poliédrico, rubik, simétrico, ...
- Secuencia prufer y códigos 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 ++, para aumentar su rendimiento. Actualmente se está trabajando para hacer de SymEngine el motor subyacente de Sage también.
- mpmath : una biblioteca de Python para aritmética de punto flotante de precisión arbitraria
- SympyCore : otro sistema de álgebra informática de Python
- SfePy : Software para la resolución de sistemas de ecuaciones diferenciales parciales acopladas (PDE) por el método de elementos finitos en 1D, 2D y 3D.
- GAlgebra : Módulo de álgebra geométrica (anteriormente sympy.galgebra).
- Quameon : Quantum Monte Carlo en Python.
- Lcapy : paquete Python experimental para la enseñanza del análisis de circuitos lineales .
- Proyecto Expresión LaTeX : Fácil composición tipográfica LaTeX de expresiones algebraicas en forma simbólica con sustitución automática y cálculo de resultados.
- Modelado estadístico simbólico : adición de operaciones estadísticas a modelos físicos complejos.
- Diofant : una bifurcación del SymPy, iniciado por Sergey B Kirpichev
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 usará automáticamente para tipos de terreno más rápidos. Esto puede aumentar varias veces el rendimiento de determinadas operaciones.
- matplotlib : si matplotlib está instalado, SymPy puede usarlo para trazar.
- Pyglet : paquete de trazado alternativo.
Ejemplos de uso
Bonita impresión
Sympy permite formatear las salidas en un formato más atractivo a través de la pprint
función. Alternativamente, el init_printing()
método permitirá la impresión bonita, por lo pprint
que no es necesario llamarlo. Pretty-Printing utilizará símbolos Unicode cuando estén disponibles en el entorno actual; de lo contrario, recurrirá a caracteres ASCII .
>>> de sympy import pprint , init_printing , Symbol , sin , cos , exp , sqrt , series , Integral , Function >>> >>> x = Symbol ( "x" ) >>> y = Symbol ( "y" ) >>> f = Función ( 'f' ) >>> # pprint se establecerá por defecto en Unicode 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 llame a init_printing () una vez y pretty-print 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
>>> de 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 . expandir () a³ + 3⋅a²⋅b + 3⋅a⋅b² + b³
Ejemplo de precisión arbitraria
>>> de sympy import Rational , pprint >>> e = 2 ** 50 / Rational ( 10 ) ** 50 >>> pprint ( e ) 1/88817841970012523233890533447265625
Diferenciación
>>> de sympy import init_printing , symbols , 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
Graficado
>>> de sympy import símbolos , cos >>> de sympy.plotting import plot3d >>> x , y = símbolos ( 'x y' ) >>> plot3d ( cos ( x * 3 ) * cos ( y * 5 ) - y , ( x , - 1 , 1 ), ( y , - 1 , 1 ))
Limites
>>> de sympy importación init_printing , Símbolo , límite , sqrt , oo >>> init_printing () >>> >>> x = Símbolo ( 'x' ) >>> límite ( sqrt ( x ** 2 - 5 * x + 6 ) - x , x , oo ) -5/2 >>> límite ( x * ( sqrt ( 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
>>> de sympy import init_printing , Symbol , Function , 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 >>> >>> dresolver ( eq , f ( x )) x f (x) = C₁⋅ℯ>>> >>> eq = Eq ( x ** 2 * f ( x ) . diff ( x ), - 3 * x * f ( x ) + sin ( x ) / x ) >>> eq 2 d sin ( x) x ⋅── (f (x)) = -3⋅x⋅f (x) + ────── dx x >>> >>> dsolve ( eq , f ( x )) C₁ - cos ( x) f (x) = ─────────── x³
Integración
>>> de sympy import init_printing , integration , Symbol , exp , cos , erf >>> init_printing () >>> x = Symbol ( 'x' ) >>> # Función polinomial >>> f = x ** 2 + x + 1 >>> f 2 x + x + 1 >>> integrar ( 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) >>> integrar ( f , x ) ___ 2 ╲╱ π ⋅erf (x) ───────────── 4
Serie
>>> de la importación de sympy Símbolo , cos , sin , pprint >>> x = Símbolo ( 'x' ) >>> e = 1 / cos ( x ) >>> pprint ( e ) 1 ────── cos (x) >>> pprint ( e . series ( 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 ⎠ x 6360
Razonamiento logico
Ejemplo 1
>>> de sympy importación * >>> x = símbolo ( 'x' ) >>> Y = Symbol ( 'Y' ) >>> hechos = Q . positiva ( x ), Q . positivo ( Y ) >>> con asumiendo ( * hechos ): ... print ( preguntar ( Q . positivo ( 2 * x + y ))) Verdadero
Ejemplo 2
>>> de sympy importación * >>> x = símbolo ( 'x' ) >>> # suposición acerca de x >>> hecho = [ Q . prime ( x )] >>> con el supuesto ( * hecho ): ... print ( preguntar ( Q . racional ( 1 / x ))) Verdadero
Ver también
- Comparación de sistemas de álgebra computarizada
Referencias
- ^ "Lanzamientos - sympy / sympy" . Consultado el 10 de agosto de 2020 , a través de GitHub .
- ^ a b c "Página de inicio de SymPy" . Consultado el 13 de octubre de 2014 .
- ^ a b c Joyner, David; Čertík, Ondřej; Meurer, Aaron; Granger, Brian E. (2012). "Sistemas de álgebra informática de código abierto: SymPy". Comunicaciones ACM en álgebra informática . 45 (3/4): 225–234. doi : 10.1145 / 2110170.2110185 .
- ^ Meurer, Aaron; Smith, Christopher P .; Paprocki, Mateusz; Čertík, Ondřej; Kirpichev, Sergey B .; Rocklin, Matthew; Kumar, AMiT; Ivanov, Sergiu; 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 .
- ^ https://github.com/sympy/sympy/wiki/SymPy-vs.-Mathematica
- ^ "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" . ASME 2013 International Design Engineering Technical Conferences y Computers and Information in Engineering Conference . Sociedad Estadounidense de Ingenieros Mecánicos: V07BT10A051. doi : 10.1115 / DETC2013-13470 . ISBN 978-0-7918-5597-3.
- ^ Rocklin, Matthew; Terrel, Andy (2012). "Estadísticas simbólicas con SymPy". Computación en ciencia e ingeniería . 14 (3): 88–93. doi : 10.1109 / MCSE.2012.56 .
- ^ Asif, Mushtaq; Olaussen, Kåre (2014). "Generador de código automático para integradores de orden superior". Comunicaciones de Física Informática . 185 (5): 1461-1472. arXiv : 1310.2111 . Código bibliográfico : 2014CoPhC.185.1461M . doi : 10.1016 / j.cpc.2014.01.012 .
- ^ "Módulo de supuestos - documentación de SymPy 1.4" . docs.sympy.org . Consultado el 5 de julio de 2019 .
- ^ "Continuum Mechanics - documentación de SymPy 1.4" . docs.sympy.org . Consultado el 5 de julio de 2019 .
enlaces externos
- Página web oficial
- Planet SymPy
- Repositorio de código en GitHub
- Foro de soporte y desarrollo
- Sala de chat de Gitter