SymPy - Semplificazione

Sympy ha una potente capacità di semplificare le espressioni matematiche. Ci sono molte funzioni in SymPy per eseguire vari tipi di semplificazione. C'è una funzione generale chiamata semplificy () che tenta di arrivare alla forma più semplice di un'espressione.

semplificare

Questa funzione è definita nel modulo sympy.simplify. Simplify () cerca di applicare euristiche intelligenti per rendere l'espressione di input "più semplice". Il codice seguente mostra l'espressione semplificata $ sin ^ 2 (x) + cos ^ 2 (x) $.

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

Lo snippet di codice sopra fornisce il seguente output:

1

espandere

Expand () è una delle funzioni di semplificazione più comuni in SymPy, utilizzata per espandere le espressioni polinomiali. Ad esempio:

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

Lo snippet di codice sopra fornisce un output equivalente all'espressione seguente -

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

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

Lo snippet di codice sopra fornisce un output equivalente all'espressione seguente -

$a^2 - b^2$

La funzione expand () rende le espressioni più grandi, non più piccole. Di solito è così, ma spesso un'espressione diventa più piccola chiamando expand () su di essa.

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

Lo snippet di codice sopra fornisce il seguente output:

-2

fattore

Questa funzione prende un polinomio e lo scompone in fattori irriducibili sui numeri razionali.

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

Lo snippet di codice sopra fornisce un output equivalente all'espressione seguente -

$z(x + 2y)^2$

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

Lo snippet di codice sopra fornisce un output equivalente all'espressione seguente -

$(x + 1)^2$

La funzione factor () è l'opposto di expand (). Ciascuno dei fattori restituiti da factor () è garantito per essere irriducibile. La funzione factor_list () restituisce un output più strutturato.

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

Lo snippet di codice sopra fornisce un output equivalente all'espressione seguente -

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

raccogliere

Questa funzione raccoglie i termini additivi di un'espressione rispetto a una lista di espressioni fino a potenze con esponenti razionali.

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

Lo snippet di codice sopra fornisce un output equivalente all'espressione seguente -

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

La funzione collect () su questa espressione risulta come segue:

>>> collect(expr,x)

Lo snippet di codice sopra fornisce un output equivalente all'espressione seguente -

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

Lo snippet di codice sopra fornisce un output equivalente all'espressione seguente -

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

Annulla

La funzione cancel () prenderà qualsiasi funzione razionale e la metterà nella forma canonica standard, p / q, dove peq sono polinomi espansi senza fattori comuni. I coefficienti direttivi di peq non hanno denominatori, cioè sono numeri interi.

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

Lo snippet di codice sopra fornisce un output equivalente all'espressione seguente -

$x+1$

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

Lo snippet di codice sopra fornisce un output equivalente all'espressione seguente -

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

>>> cancel(expr)

Lo snippet di codice sopra fornisce un output equivalente all'espressione seguente -

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

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

Lo snippet di codice sopra fornisce un output equivalente all'espressione seguente -

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

trigsimp

Questa funzione viene utilizzata per semplificare le identità trigonometriche. Si può notare che le convenzioni di denominazione per le funzioni trigonometriche inverse consistono nell'appendere una a all'inizio del nome della funzione. Ad esempio, il coseno inverso, o arcocoseno, è chiamato 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 funzione trigsimp utilizza l'euristica per applicare l'identità trigonometrica più adatta.

powersimp

Questa funzione riduce la data espressione combinando potenze con basi ed esponenti simili.

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

Lo snippet di codice sopra fornisce un output equivalente all'espressione seguente -

$x^y x^z y^z$

>>> powsimp(expr)

Lo snippet di codice sopra fornisce un output equivalente all'espressione seguente -

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

Puoi fare in modo che powsimp () combini solo basi o combini solo esponenti modificando combina = 'base' o combina = 'esp'. Per impostazione predefinita, combina = 'all', che fa entrambe le cose. Se force è True, le basi verranno combinate senza controllare le ipotesi.

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

Lo snippet di codice sopra fornisce un output equivalente all'espressione seguente -

$x^y(xy)^z$

combsimp

Le espressioni combinatorie che coinvolgono fattoriale e binomi possono essere semplificate usando la funzione combsimp (). SymPy fornisce una funzione fattoriale ()

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

Lo snippet di codice sopra fornisce un output equivalente all'espressione seguente -

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

Per semplificare l'espressione combinatoria sopra, usiamo la funzione combsimp () come segue:

>>> combsimp(expr)

Lo snippet di codice sopra fornisce un output equivalente all'espressione seguente -

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

Il binomio (x, y) è il numero di modi per scegliere y elementi da un insieme di x elementi distinti. Inoltre è spesso scritto come xCy.

>>> binomial(x,y)

Lo snippet di codice sopra fornisce un output equivalente all'espressione seguente -

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

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

Lo snippet di codice sopra fornisce un output equivalente all'espressione seguente -

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

logcombine

Questa funzione prende i logaritmi e li combina utilizzando le seguenti regole:

  • log (x) + log (y) == log (x * y) se entrambi sono positivi
  • a * log (x) == log (x ** a) se x è positivo e a è reale
>>> logcombine(a*log(x) + log(y) - log(z))

Lo snippet di codice sopra fornisce un output equivalente all'espressione seguente -

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

Se il parametro force di questa funzione è impostato su True, si presume che le ipotesi di cui sopra valgano se non è già presente alcuna ipotesi su una quantità.

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

Lo snippet di codice sopra fornisce un output equivalente all'espressione seguente -

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