Sympy

diciembre 07, 2016

Sympy

Módulo de Python de computación simbólica, permite mostrar resultados de forma exacta y no aproximada como estan definidas por defecto y permite realizar operaciones con variables que no tienen un valor definido.
In [1]:
# Importación de la librería sympy
import sympy

Operaciones básicas

Normalmente una operación en Python arroja un resultado aproximado, cuyas cifras dependen del tipo de dato. Se hace una comparación entre algunas operaciones matemáticas con sympy y con la librería math.
Raiz cuadrada
In [2]:
import math
math.sqrt(8)
Out[2]:
2.8284271247461903
In [3]:
sympy.sqrt(8)
Out[3]:
2*sqrt(2)
Logaritmo natural
In [4]:
sympy.log(2)
Out[4]:
log(2)
In [5]:
math.log(2)
Out[5]:
0.6931471805599453
Infinito
In [6]:
from sympy import oo
In [7]:
oo + 1
Out[7]:
oo
In [8]:
34534535453 < oo
Out[8]:
True
In [9]:
34534 / oo
Out[9]:
0
In [10]:
oo / oo
Out[10]:
nan
In [11]:
type(oo)
Out[11]:
sympy.core.numbers.Infinity

Números racionales

In [12]:
number = sympy.S('3/4')
number
Out[12]:
3/4
In [13]:
2 * number
Out[13]:
3/2

Evaluación de expresiones

Para mostrar el resultado como número real se usa la función evalf( )
In [14]:
number.evalf()
Out[14]:
0.750000000000000

Definición de variables

Normalmente para realizar un operación con una variable, esta debe estar definida antes. Sympy permite realizar operaciones con variables sin tener su valor exacto, pero para no causar errores en Python se debe indicar que es una variable de sympy.
In [15]:
# Python reconoce x como una variable de sympy y ahora permite realizar 
# operaciones con esta sin tener asignado un valor numérico
x = sympy.symbols('x')
In [16]:
x**2 + 4*x + 1
Out[16]:
x**2 + 4*x + 1
In [17]:
x+4*x
Out[17]:
5*x
In [18]:
x**4/x**2
Out[18]:
x**2
Para definir varias variables
In [19]:
r, y = sympy.symbols('r y')
In [20]:
2*r + y + 5*r - 4*y
Out[20]:
7*r - 3*y

Sustituir variables

Luego de definida una variable se generan expresiones al hacer operaciones con estas. El valor de la variable de sympy puede ser sustituida en cualquier momento y obtener el valor de la expresión. Para esto se usa el método subs( )
In [21]:
x = sympy.symbols('x')

# Se define la expresión
expr = x**4 - 1
expr
Out[21]:
x**4 - 1
In [22]:
# Se reemplaza x por 2
expr.subs(x, 2)
Out[22]:
15
In [23]:
expr = sympy.sin(x) + sympy.tan(x)
In [24]:
expr.subs(x, 0.5)
Out[24]:
1.02572802844799
Para una sustitución en expresiones con mas de una variable se puede usar un diccionario especificando los valores algunas o todas las variables.
In [25]:
a, b = sympy.symbols('a, b')
x = a + b
In [26]:
x.subs({a:2})
Out[26]:
b + 2
In [27]:
x.subs({a:2, b:4})
Out[27]:
6

Simplificación

In [28]:
# Se definen las variables
x, y = sympy.symbols('x y')
In [29]:
sympy.simplify(sympy.sqrt(8*x*3))
Out[29]:
2*sqrt(6)*sqrt(x)
In [30]:
sympy.simplify(sympy.cos(x)**2 + sympy.sin(x)**2)
Out[30]:
1
In [31]:
sympy.simplify((x**4 + 5 * x**3 - 2 * x**2 + x)/(x**2 + x))
Out[31]:
(x**3 + 5*x**2 - 2*x + 1)/(x + 1)
In [32]:
sympy.S((x**4 + 5 * x**3 - 2 * x**2 + x)/(x**2 + x))
Out[32]:
(x**4 + 5*x**3 - 2*x**2 + x)/(x**2 + x)

Solución de ecuaciones con Sympy

La sintaxis para resolver una expresión algebraica con sympy consiste en usar la librería solve y en paréntesis usar la expresión y luego la incógnita:
solve(expresión a resolver, incógnita).
Algunos ejemplos de solución de ecuaciones con sympy:
$2x-1=0$
In [33]:
from sympy.solvers import solve
solve(2*x-1, x)
Out[33]:
[1/2]
$2x^{2}+4x-6=0$
In [34]:
solve(2*x**2 + 4*x - 6, x)
Out[34]:
[-3, 1]
$x+y=1$
$xy=-20$
In [35]:
eq1 = x + 2*y - 1
eq2 = x*y + 20
sol = solve((eq1, eq2), (x, y))
In [36]:
print sol
[(1/2 + sqrt(161)/2, -sqrt(161)/4 + 1/4), (-sqrt(161)/2 + 1/2, 1/4 + sqrt(161)/4)]
In [37]:
[[x.evalf(), y.evalf()] for x, y in sol]
Out[37]:
[[6.84428877022476, -2.92214438511238], [-5.84428877022476, 3.42214438511238]]

Polinomios

Expansión

Expandir el polinomio
$P = (m-1)(m-6)(m-5)$
In [38]:
p = sympy.simplify('(m-1)*(m-6)*(m-5)')
print p
(m - 6)*(m - 5)*(m - 1)
In [39]:
p_exp = p.expand()
p_exp
Out[39]:
m**3 - 12*m**2 + 41*m - 30

Factorización

Se toma el polinomio anterior expandido y se factoriza usando el método factor( )
In [40]:
p_exp.factor()
Out[40]:
(m - 6)*(m - 5)*(m - 1)
Solución de la ecuación igualada a cero
In [41]:
solve(p, 'm')
Out[41]:
[1, 5, 6]
Note que al no haber definido m como una variable de sympy, al momento de reemplazar debe indicarse 'm' (como un string), de otra forma resulta un error porque la variable m no ha sido definida para el intérprete de Python.

raices

Se obtienen las raices del polinomio p igualado a cero
In [42]:
sympy.roots(p, multiple=True)
Out[42]:
[1, 5, 6]

Igualdad de expresiones

Se toman dos expresiones iguales:
In [43]:
m = sympy.symbols('m')
p = (m-1)*(m-6)*(m-5)
r = m**3 - 12*m**2 + 41*m - 30
Se sabe entonces que p es la expresión r factorizada, pero si se compara con el igual de Python (==) no las identifica como dos expresiones iguales
In [44]:
p == r
Out[44]:
False
In [45]:
p - r == 0
Out[45]:
False
Para hacer esta comparación se usa la función simplify
In [46]:
sympy.simplify(p - r) == 0
Out[46]:
True

You Might Also Like

1 comments

  1. CASINOS for sale | Casino - jtmhub.com
    CASINOS are now a 강원도 출장샵 part of the CASINO 광주광역 출장안마 RESORT located 문경 출장샵 in Temecula, CA. CASINOS are now a 익산 출장안마 part of the CASINO RESORT 충청남도 출장마사지 located in Temecula, CA.

    ResponderEliminar

Apoyado por: