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]
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]
Tenga en cuenta que para trazar gráficos se requiere el módulo externo Matplotlib o Pyglet .
Desde la versión 1.0, SymPy tiene el paquete mpmath como dependencia.
Hay varias dependencias opcionales que pueden mejorar sus capacidades:
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 habilitará la impresión bonita, por lo que pprint
no 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
>>> 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³
>>> de sympy importar Racional , pprint >>> e = 2 ** 50 / Racional ( 10 ) ** 50 >>> pprint ( e ) 1/88817841970012523233890533447265625
>>> 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
>>> 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>
>>> 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 ℯ
>>> 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³
>>> 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
>>> 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
>>> 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
>>> 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