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