SymPy - Simplificação

Sympy tem uma capacidade poderosa de simplificar expressões matemáticas. Existem muitas funções no SymPy para realizar vários tipos de simplificação. Uma função geral chamada simplify () tenta chegar à forma mais simples de uma expressão.

simplificar

Esta função é definida no módulo sympy.simplify. simplify () tenta aplicar heurísticas inteligentes para tornar a expressão de entrada “mais simples”. O código a seguir mostra a simplificação da expressão $ sin ^ 2 (x) + cos ^ 2 (x) $.

>>> from sympy import * 
>>> x=Symbol('x')
>>> expr=sin(x)**2 + cos(x)**2 
>>> simplify(expr)

O trecho de código acima fornece a seguinte saída -

1

expandir

O expand () é uma das funções de simplificação mais comuns no SymPy, usado na expansão de expressões polinomiais. Por exemplo -

>>> a,b=symbols('a b') 
>>> expand((a+b)**2)

O trecho de código acima fornece uma saída equivalente à expressão abaixo -

$a^2 + 2ab + b^2$

>>> expand((a+b)*(a-b))

O trecho de código acima fornece uma saída equivalente à expressão abaixo -

$a^2 - b^2$

A função expand () torna as expressões maiores, não menores. Normalmente esse é o caso, mas freqüentemente uma expressão se tornará menor ao chamar expand () nela.

>>> expand((x + 1)*(x - 2) - (x - 1)*x)

O trecho de código acima fornece a seguinte saída -

-2

fator

Essa função pega um polinômio e o fatora em fatores irredutíveis sobre os números racionais.

>>> x,y,z=symbols('x y z') 
>>> expr=(x**2*z + 4*x*y*z + 4*y**2*z) 
>>> factor(expr)

O trecho de código acima fornece uma saída equivalente à expressão abaixo -

$z(x + 2y)^2$

>>> factor(x**2+2*x+1)

O trecho de código acima fornece uma saída equivalente à expressão abaixo -

$(x + 1)^2$

A função factor () é o oposto de expand (). Cada um dos fatores retornados por fator () é garantidamente irredutível. A função factor_list () retorna uma saída mais estruturada.

>>> expr=(x**2*z + 4*x*y*z + 4*y**2*z) 
>>> factor_list(expr)

O trecho de código acima fornece uma saída equivalente à expressão abaixo -

(1, [(z, 1), (x + 2*y, 2)])

recolher

Esta função coleta termos aditivos de uma expressão em relação a uma lista de expressões até potências com expoentes racionais.

>>> expr=x*y + x - 3 + 2*x**2 - z*x**2 + x**3 
>>> expr

O trecho de código acima fornece uma saída equivalente à expressão abaixo -

$x^3 + x^2z + 2x^2 + xy + x - 3$

A função collect () nesta expressão resulta da seguinte maneira -

>>> collect(expr,x)

O trecho de código acima fornece uma saída equivalente à expressão abaixo -

$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)

O trecho de código acima fornece uma saída equivalente à expressão abaixo -

$Y^3+Y^2(x+4z)+y(4xz+2x)$

cancelar

A função cancel () pegará qualquer função racional e a colocará na forma canônica padrão, p / q, onde peq são polinômios expandidos sem fatores comuns. Os principais coeficientes de peq não têm denominadores, ou seja, são inteiros.

>>> expr1=x**2+2*x+1 
>>> expr2=x+1 
>>> cancel(expr1/expr2)

O trecho de código acima fornece uma saída equivalente à expressão abaixo -

$x+1$

>>> expr = 1/x + (3*x/2 - 2)/(x - 4) 
>>> expr

O trecho de código acima fornece uma saída equivalente à expressão abaixo -

$\frac{\frac{3x}{2} - 2}{x - 4} + \frac{1}{x}$

>>> cancel(expr)

O trecho de código acima fornece uma saída equivalente à expressão abaixo -

$\frac{3x^2 - 2x - 8}{2x^2 - 8}$

>>> expr=1/sin(x)**2 
>>> expr1=sin(x) 
>>> cancel(expr1*expr)

O trecho de código acima fornece uma saída equivalente à expressão abaixo -

$\frac{1}{\sin(x)}$

trigsimp

Esta função é usada para simplificar identidades trigonométricas. Pode-se notar que as convenções de nomenclatura para funções trigonométricas inversas são anexar um a à frente do nome da função. Por exemplo, o cosseno inverso, ou arco cosseno, é chamado 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

A função trigsimp usa heurísticas para aplicar a identidade trigonométrica mais adequada.

powerimp

Esta função reduz a expressão dada combinando potências com bases e expoentes semelhantes.

>>> expr=x**y*x**z*y**z 
>>> expr

O trecho de código acima fornece uma saída equivalente à expressão abaixo -

$x^y x^z y^z$

>>> powsimp(expr)

O trecho de código acima fornece uma saída equivalente à expressão abaixo -

$x^{y+z} y^z$

Você pode fazer powsimp () apenas combinar bases ou apenas combinar expoentes mudando combine = 'base' ou combine = 'exp'. Por padrão, combine = 'all', que faz as duas coisas. Se force for True, as bases serão combinadas sem verificar as suposições.

>>> powsimp(expr, combine='base', force=True)

O trecho de código acima fornece uma saída equivalente à expressão abaixo -

$x^y(xy)^z$

combsimp

Expressões combinatórias envolvendo fatoriais e binômios podem ser simplificadas usando a função combsimp (). SymPy fornece uma função fatorial ()

>>> expr=factorial(x)/factorial(x - 3) 
>>> expr

O trecho de código acima fornece uma saída equivalente à expressão abaixo -

$\frac{x!}{(x - 3)!}$

Para simplificar a expressão combinatória acima, usamos a função combsimp () como segue -

>>> combsimp(expr)

O trecho de código acima fornece uma saída equivalente à expressão abaixo -

$x(x-2)(x-1)$

O binômio (x, y) é o número de maneiras de escolher y itens de um conjunto de x itens distintos. Também é freqüentemente escrito como xCy.

>>> binomial(x,y)

O trecho de código acima fornece uma saída equivalente à expressão abaixo -

$(\frac{x}{y})$

>>> combsimp(binomial(x+1, y+1)/binomial(x, y))

O trecho de código acima fornece uma saída equivalente à expressão abaixo -

$\frac{x + 1}{y + 1}$

logcombine

Esta função pega logaritmos e os combina usando as seguintes regras -

  • log (x) + log (y) == log (x * y) se ambos forem positivos
  • a * log (x) == log (x ** a) se x for positivo e a for real
>>> logcombine(a*log(x) + log(y) - log(z))

O trecho de código acima fornece uma saída equivalente à expressão abaixo -

$a\log(x) + \log(y) - \log(z)$

Se o parâmetro de força desta função for definido como Verdadeiro, então as suposições acima serão consideradas válidas se não houver nenhuma suposição já estabelecida sobre uma quantidade.

>>> logcombine(a*log(x) + log(y) - log(z), force=True)

O trecho de código acima fornece uma saída equivalente à expressão abaixo -

$\log\frac{x^a y}{z}$