Sympy – Fórmulas y funciones simbólicas

[ expresiones ] [ operaciones ] [ evaluar f(x) ] [ f(x) a lambda ] [ f(x) matemáticas ] [ derivadas ] [ integrales ]

SymPy es una librería usada para manejar de forma algebraica las expresiones matemáticas. Se requiere definir el símbolo que representa la variable en la expresión, por ejemplo la letra ‘x‘. Si la librería Sympy no está disponible o muestra un error la puede revisar las instrucciones del enlace instalar con pip.

Una formula o función matemática f(x) descrita como fx se puede derivar, integrar, simplificar sus términos. También se puede construir una expresión matemática, por ejemplo desarrollar los términos para un polinomio como Taylor.

Referencia: https://www.sympy.org/es/

[ expresiones ] [ operaciones ] [ evaluar f(x) ] [ f(x) a lambda ] [ f(x) matemáticas ] [ derivadas ] [ integrales ]
..


1. Expresiones con Sympy

Una función f(x) como un polinomio

f(x) = (1-x)^5 + 5 x ((1-x)^4) - 0.4

Se pueden manejar de forma algebraica con Sympy al declarar la variable independiente ‘x’ como un símbolo. La expresión se asigna a fx

import sympy as sym
x = sym.Symbol('x')
fx = (1-x)**5 + 5*x*((1-x)**4) - 0.4

Se simplifican o se expande los términos del polinomio con solo una instrucción,

fx = fx.expand()
print(fx)

mostrando el siguiente resultado:

4*x**5 - 15*x**4 + 20*x**3 - 10*x**2 + 0.6

o una presentación diferente con sym.pprint():

>>> sym.pprint(fx)
           4          5      
5*x*(1 - x)  + (1 - x)  - 0.4
>>> 

Referencia: https://docs.sympy.org/latest/tutorials/intro-tutorial/printing.html#setting-up-pretty-printing

[ expresiones ] [ operaciones ] [ evaluar f(x) ] [ f(x) a lambda ] [ f(x) matemáticas ] [ derivadas ] [ integrales ]
..


2. Operaciones, combinar otras expresiones

A una función simbólica fx se pueden añadir más términos con el mismo símbolo

>>> import sympy as sym
>>> sym.Symbol('x')
>>> fx = sym.cos(x)
>>> gx = fx + x
>>> gx
x + cos(x)
>>> gx = gx - 2
>>> gx
x + cos(x) - 2

Por lo que las funciones simbólicas son útiles cuando se construyen expresiones, como en el caso de series de Taylor descritas en la Unidad01

[ expresiones ] [ operaciones ] [ evaluar f(x) ] [ f(x) a lambda ] [ f(x) matemáticas ] [ derivadas ] [ integrales ]
..


3. Evaluar una expresión f(x) con Sympy

Las expresiones simbólicas se pueden evaluar en un punto, ejemplo x0=0.1 usando la instrucción fx.subs(x,x0), que sustituye el símbolo de la variable x con el valor definido para x0.

>>> import sympy as sym
>>> sym.Symbol('x')
>>> fx = sym.cos(x)
>>> fx.subs(x,0.1)
0.995004165278026

Referencia: https://docs.sympy.org/latest/tutorials/intro-tutorial/basic_operations.html#substitution

[ expresiones ] [ operaciones ] [ evaluar f(x) ] [ f(x) a lambda ] [ f(x) matemáticas ] [ derivadas ] [ integrales ]
..


4. Conversión de forma simbólica a forma numérica Lambda

Para evaluar varios puntos en la expresión  en forma numérica para usar ‘x’ con valores en un vector o matriz como un arreglo, se convierte a la forma numérica Lambda con la instrucción sym.lambdify(x,fx)

>>> >>> import sympy as sym
>>> sym.Symbol('x')
>>> fx = sym.cos(x)
&>>> f_x = sym.lambdify(x,fx)
>>> f_x(0.1)
0.9950041652780258
>>> f_x([0.1,0.3,0.5])
array([0.99500417, 0.95533649, 0.87758256])
>>> 

Referencia: https://docs.sympy.org/latest/tutorials/intro-tutorial/basic_operations.html#lambdify

Ejemplo: Polinomio de Taylor – Ejemplos con Sympy-Python

[ expresiones ] [ operaciones ] [ evaluar f(x) ] [ f(x) a lambda ] [ f(x) matemáticas ] [ derivadas ] [ integrales ]
..


5. expresiones de Funciones matemáticas

Las Funciones matemáticas usadas en otras librerías como Numpy tienen también su representación simbólica en Sympy. Ejemplo cos(x):

f(x) = \cos (x)
>>> import sympy as sym
>>> x = sym.Symbol('x')
>>> fx = sym.cos(x)

Realice pruebas con otras funciones: sin(x), exp(x), log(x), log10(x), Heaviside(x)

[ expresiones ] [ operaciones ] [ evaluar f(x) ] [ f(x) a lambda ] [ f(x) matemáticas ] [ derivadas ] [ integrales ]
..


6. Derivadas con Sympy

Las expresiones de la derivada se obtienen con la expresión fx.diff(x,k), indicando la k-ésima  derivada de la expresión.

>>> import sympy as sym
>>> x = sym.Symbol('x')
>>> fx = sym.cos(x)
>>> x
x
>>> fx
cos(x)
>>> fx.diff(x,1)
-sin(x)
>>> fx.diff(x,2)
-cos(x)

Referencia: https://docs.sympy.org/latest/tutorials/intro-tutorial/calculus.html#derivatives

Ejemplos: Sistemas LTI CT – Respuesta a entrada cero con Sympy-Python

Derivadas como expresión de Sympy sin evaluar

Cuando se requiere expresar tan solo la operación de derivadas, que será luego usada o reemplazada con otra expresión, se usa la derivada sin evaluar. Ejemplo:

y = \frac{d}{dx}f(x)

Para más adelante definir f(x).

En Sympy, la expresión de y se realiza indicando que f será una variable

x = sym.Symbol('x', real=True)
f = sym.Symbol('f', real=True)
y = sym.diff(f,x, evaluate=False) # derivada sin evaluar
g = sym.cos(x) + x**2
yg = y.subs(f,g).doit() # sustituye f con g y evalua .doit()
>>> y
Derivative(f, x)
>>> g
x**2 + cos(x)
>>> yg
2*x - sin(x)

Ejemplos:

Polinomio de Taylor – Ejemplos con Sympy-Python

EDO lineal – solución complementaria y particular con Sympy-Python

EDO lineal – ecuaciones auxiliar, general y complementaria con Sympy-Python

EDP Parabólica – analítico con Sympy-Python

EDP Elípticas – analítico con Sympy-Python

Evaluación de las expresiones Sympy

Se define la expresión ‘derivada’ y se la usa con la instrucción fx.subs(x,valor)

>>> fx.subs(x,0)
1
>>> fx.subs(x,1/3)
0.944956946314738
>>> derivada = fx.diff(x,1)
>>> derivada
-sin(x)
>>> derivada.subs(x,1/3)
-0.327194696796152
>>> 

[ expresiones ] [ operaciones ] [ evaluar f(x) ] [ f(x) a lambda ] [ f(x) matemáticas ] [ derivadas ] [ integrales ]
..


7. Integrales con Sympy

Sympy incorpora la operación del integral en sus expresiones, que pueden ser integrales definidas en un intervalo o expresiones sin evaluar.

>>> import sympy as sym
>>> t = sym.Symbol('t',real=True)
>>> x = 10*sym.exp(-3*t)
>>> x
10*exp(-3*t)
>>> y = sym.integrate(x,(t,0,10))
>>> y
10/3 - 10*exp(-30)/3
>>> y = sym.integrate(x,(t,0,sym.oo))
>>> y
10/3

Referencia: https://docs.sympy.org/latest/tutorials/intro-tutorial/calculus.html#integrals

Ejemplos:
Transformada de Laplace – Integral con Sympy-Python

Series de Fourier de señales periódicas con Sympy-Python

Integral de Convolución entre x(t) y h(t) causal con Sympy-Python

[ expresiones ] [ operaciones ] [ evaluar f(x) ] [ f(x) a lambda ] [ f(x) matemáticas ] [ derivadas ] [ integrales ]