SymPy - Simplificación
Sympy tiene una poderosa habilidad para simplificar expresiones matemáticas. Hay muchas funciones en SymPy para realizar varios tipos de simplificación. Hay una función general llamada simplificar () que intenta llegar a la forma más simple de una expresión.
simplificar
Esta función se define en el módulo sympy.simplify. simplify () intenta aplicar heurísticas inteligentes para hacer que la expresión de entrada sea "más simple". El siguiente código muestra una expresión simplificada $ sin ^ 2 (x) + cos ^ 2 (x) $.
>>> from sympy import *
>>> x=Symbol('x')
>>> expr=sin(x)**2 + cos(x)**2
>>> simplify(expr)
El fragmento de código anterior da el siguiente resultado:
1
expandir
Expand () es una de las funciones de simplificación más comunes en SymPy, que se usa para expandir expresiones polinómicas. Por ejemplo
>>> a,b=symbols('a b')
>>> expand((a+b)**2)
El fragmento de código anterior proporciona una salida equivalente a la siguiente expresión:
$a^2 + 2ab + b^2$
>>> expand((a+b)*(a-b))
El fragmento de código anterior proporciona una salida equivalente a la siguiente expresión:
$a^2 - b^2$
La función expand () hace que las expresiones sean más grandes, no más pequeñas. Por lo general, este es el caso, pero a menudo una expresión se volverá más pequeña al llamar a expand () en ella.
>>> expand((x + 1)*(x - 2) - (x - 1)*x)
El fragmento de código anterior da el siguiente resultado:
-2
factor
Esta función toma un polinomio y lo factoriza en factores irreductibles sobre los números racionales.
>>> x,y,z=symbols('x y z')
>>> expr=(x**2*z + 4*x*y*z + 4*y**2*z)
>>> factor(expr)
El fragmento de código anterior proporciona una salida equivalente a la siguiente expresión:
$z(x + 2y)^2$
>>> factor(x**2+2*x+1)
El fragmento de código anterior proporciona una salida equivalente a la siguiente expresión:
$(x + 1)^2$
La función factor () es opuesta a expand (). Se garantiza que cada uno de los factores devueltos por factor () es irreductible. La función factor_list () devuelve una salida más estructurada.
>>> expr=(x**2*z + 4*x*y*z + 4*y**2*z)
>>> factor_list(expr)
El fragmento de código anterior proporciona una salida equivalente a la siguiente expresión:
(1, [(z, 1), (x + 2*y, 2)])
recoger
Esta función recopila términos adicionales de una expresión con respecto a una lista de expresión hasta potencias con exponentes racionales.
>>> expr=x*y + x - 3 + 2*x**2 - z*x**2 + x**3
>>> expr
El fragmento de código anterior proporciona una salida equivalente a la siguiente expresión:
$x^3 + x^2z + 2x^2 + xy + x - 3$
La función collect () en esta expresión resulta de la siguiente manera:
>>> collect(expr,x)
El fragmento de código anterior proporciona una salida equivalente a la siguiente expresión:
$x^3 + x^2(2 - z) + x(y + 1) - 3$
>>> expr=y**2*x + 4*x*y*z + 4*y**2*z+y**3+2*x*y
>>> collect(expr,y)
El fragmento de código anterior proporciona una salida equivalente a la siguiente expresión:
$Y^3+Y^2(x+4z)+y(4xz+2x)$
cancelar
La función cancel () tomará cualquier función racional y la pondrá en la forma canónica estándar, p / q, donde pyq son polinomios expandidos sin factores comunes. Los coeficientes principales de pyq no tienen denominadores, es decir, son números enteros.
>>> expr1=x**2+2*x+1
>>> expr2=x+1
>>> cancel(expr1/expr2)
El fragmento de código anterior proporciona una salida equivalente a la siguiente expresión:
$x+1$
>>> expr = 1/x + (3*x/2 - 2)/(x - 4)
>>> expr
El fragmento de código anterior proporciona una salida equivalente a la siguiente expresión:
$\frac{\frac{3x}{2} - 2}{x - 4} + \frac{1}{x}$
>>> cancel(expr)
El fragmento de código anterior proporciona una salida equivalente a la siguiente expresión:
$\frac{3x^2 - 2x - 8}{2x^2 - 8}$
>>> expr=1/sin(x)**2
>>> expr1=sin(x)
>>> cancel(expr1*expr)
El fragmento de código anterior proporciona una salida equivalente a la siguiente expresión:
$\frac{1}{\sin(x)}$
trigsimp
Esta función se utiliza para simplificar las identidades trigonométricas. Se puede notar que las convenciones de nomenclatura para funciones trigonométricas inversas es agregar una a al principio del nombre de la función. Por ejemplo, el coseno inverso, o arco coseno, se llama acos ().
>>> from sympy import trigsimp, sin, cos
>>> from sympy.abc import x, y
>>> expr = 2*sin(x)**2 + 2*cos(x)**2
>>> trigsimp(expr)
2
La función trigsimp utiliza heurística para aplicar la identidad trigonométrica más adecuada.
powersimp
Esta función reduce la expresión dada combinando potencias con bases y exponentes similares.
>>> expr=x**y*x**z*y**z
>>> expr
El fragmento de código anterior proporciona una salida equivalente a la siguiente expresión:
$x^y x^z y^z$
>>> powsimp(expr)
El fragmento de código anterior proporciona una salida equivalente a la siguiente expresión:
$x^{y+z} y^z$
Puede hacer que powsimp () solo combine bases o solo combine exponentes cambiando combine = 'base' o combine = 'exp'. Por defecto, combine = 'all', que hace ambas cosas. Si force es True, las bases se combinarán sin verificar las suposiciones.
>>> powsimp(expr, combine='base', force=True)
El fragmento de código anterior proporciona una salida equivalente a la siguiente expresión:
$x^y(xy)^z$
peine
Las expresiones combinatorias que involucran factorial y binomio se pueden simplificar usando la función combsimp (). SymPy proporciona una función factorial ()
>>> expr=factorial(x)/factorial(x - 3)
>>> expr
El fragmento de código anterior proporciona una salida equivalente a la siguiente expresión:
$\frac{x!}{(x - 3)!}$
Para simplificar la expresión combinatoria anterior usamos la función combsimp () de la siguiente manera:
>>> combsimp(expr)
El fragmento de código anterior proporciona una salida equivalente a la siguiente expresión:
$x(x-2)(x-1)$
El binomio (x, y) es el número de formas de elegir y elementos de un conjunto de x elementos distintos. También suele escribirse como xCy.
>>> binomial(x,y)
El fragmento de código anterior proporciona una salida equivalente a la siguiente expresión:
$(\frac{x}{y})$
>>> combsimp(binomial(x+1, y+1)/binomial(x, y))
El fragmento de código anterior proporciona una salida equivalente a la siguiente expresión:
$\frac{x + 1}{y + 1}$
logcombine
Esta función toma logaritmos y los combina usando las siguientes reglas:
- log (x) + log (y) == log (x * y) si ambos son positivos
- a * log (x) == log (x ** a) si x es positivo y a es real
>>> logcombine(a*log(x) + log(y) - log(z))
El fragmento de código anterior proporciona una salida equivalente a la siguiente expresión:
$a\log(x) + \log(y) - \log(z)$
Si el parámetro de fuerza de esta función se establece en Verdadero, se supondrá que las suposiciones anteriores son válidas si no existe una suposición ya establecida sobre una cantidad.
>>> logcombine(a*log(x) + log(y) - log(z), force=True)
El fragmento de código anterior proporciona una salida equivalente a la siguiente expresión:
$\log\frac{x^a y}{z}$