13.3. Álgebra simbólica#

Sympy es una librería de álgebra simbólica. Se importa así:

import sympy as sym

En vez de realizar operaciones de manera numérica, el álgebra simbólica guarda las operaciones como símbolos. Obtenga la siguiente operación:

\[\begin{equation*} \sqrt{11} \end{equation*}\]

Aprendizaje de código

import numpy as np
a=np.sqrt(11)
print(a)

y usando sympy

import sympy as sym
a=sympy.sqrt(11)
print(a)
# raiz de 11 en Python estándar
# raíz de 11 en Python simbólico

Para pensar

¿Qué diferencias observa entre los resultados de print(a) de python estándar y de python simbólico?

Aprendizaje de código

Podemos mejorar la apariencia de una expresión si en vez de usar print utilizamos:

sym.pprint(a)

o simplemente escribimos el nombre de la variable.

# Pruebe la alternativa de impresión.

Aprendizaje de código

Podemos obtener el valor numérico con evalf().

Obtenga el valor numérico de \(\sqrt{11}\)

# Valor numérico de raíz de 11
a.evalf()
\[\displaystyle 3.3166247903554\]

Aprendizaje de código

Las variables comunes de álgebra son símbolos. Si queremos definir x, escribimos

x=sym.symbols("x")
# Defina la variable simbólica x

Imprimima x para verificar.

# Imprima x

Una variable puede almacenar cosas distintas a su nombre. Pruebe con

Aprendizaje de código

y=x+1

e imprima \(y\). Observe que el resultado no es un número, sino una expresión.

# Defina "y" simbólica e imprímala.

Es posible multiplicar expresiones y hacerles cualquier tipo de operación. Por ejemplo, haga el producto \(xy\), guárdelo en una variable \(z\) e imprima el resultado.

# z = xy

Aprendiendo código

Se puede obtener el resultado de desarrollar las operaciones con

sym.expand(expresión)

Desarrolle la operación contenida en z, guárdelo en una variable c e imprímala.

# Expanda el contenido de la variable z
c=sym.expand(z)
sym.pprint(c)
 2    
x  + x

Aprendizaje de codigo

Podemos obtener expresiones en su forma factorizada con sp.simplify().

Pruebe con la variable c.

# Simplifique c
sym.simplify(c)
\[\displaystyle x \left(x + 1\right)\]

Aprendizaje de código

Se pueden utilizar álgebra simbólica para derivar, esto se hace con

sym.diff(funcion, variable a derivar, orden de la derivada).

o si vamos a derivar respecto a diferentes variables

sym.diff(funcion, variable a derivar1, variable a derivar2, variable a derivar3,...).

Exprese de manera simbólica la función

(13.1)#\[\begin{equation} f=x^2+sin(x) \nonumber \end{equation}\]

y obtenga \(\frac{df}{dx}\) y \(\frac{d^2f}{dx^2}\).

# Exprese f(x) y derive a primer y segundo orden.
x=sym.symbols("x")
f=x**2+sym.sin(x)
sym.pprint(f)
sym.pprint(sym.diff(f,x))
sym.pprint(sym.diff(f,x,2))
 2         
x  + sin(x)
2⋅x + cos(x)
2 - sin(x)

Aprendizaje de código

Podemos integrar simbólicamente con

sym.integrate(funcion, variable a integrar1, variable a integrar2, variable a integrar3,...)

Defina la función

\[\begin{equation*} f=e^{-r} \end{equation*}\]

Y realice la integral indefinida

\[\begin{equation*} \int e^{-r} dr \end{equation*}\]
# Defina f(r) = e^{-r} y realice la integral indicada.
r=sym.symbols("r")
f=sym.exp(-r)
sym.pprint(f)
sym.pprint(sym.integrate(f,r))
 -r
ℯ  
  -r
-ℯ  

Aprendizaje de código

Podemos integrar de manera definida con

sym.integrate(funcion, (variable_a_integrar1,lim_inf1,lim_sup1), (variable_a_integrar2,lim_inf2,lim_sup2),(variable_a_integrar3,lim_inf3,lim_sup3),...)

Defina la función

\[\begin{equation*} f=e^{-\alpha r^2} \end{equation*}\]

Y realice la integral

\[\begin{equation*} \int_0^\infty e^{-\alpha r^2} dr \end{equation*}\]
# Realice integral definida
r=sym.symbols("r")
alpha=sym.symbols("alpha",positive=True)
f=sym.exp(-alpha*r**2)
sym.pprint(sym.integrate(f,(r,0,sym.oo)))
 √π 
────
2⋅√α

También se pueden resolver ecuaciones diferenciales. dsolve indica resolver una ecuación, y Eq indica la ecuación. Resuelva

\[\begin{equation*} -\frac{\hbar^2}{2m} \frac{d^2}{dx^2} \psi(x) = E \psi(x)\,, \end{equation*}\]

definiendo \(k^2=\frac{2mE}{\hbar^2}\)

\[\begin{equation*} \frac{d^2}{dx^2} \psi(x) + k^2 \psi(x) = 0\,. \end{equation*}\]
x=sym.symbols("x")
k=sym.symbols("k")

psi=sym.Function("psi")
eq=sym.Eq(psi(x).diff(x,x)+k**2*psi(x),0)
sym.pprint(eq)

sym.pprint(sym.dsolve(eq,psi(x)))
            2          
 2         d           
k ⋅ψ(x) + ───(ψ(x)) = 0
            2          
          dx           
           -ⅈ⋅k⋅x       ⅈ⋅k⋅x
ψ(x) = C₁⋅ℯ       + C₂⋅ℯ     

13.3.1. Referencias#

Página oficial de sympy www.sympy.org