SymPy - Uproszczenie

Sympy ma potężną zdolność upraszczania wyrażeń matematycznych. W SymPy jest wiele funkcji służących do różnych uproszczeń. Istnieje ogólna funkcja o nazwie simplify (), która próbuje dojść do najprostszej formy wyrażenia.

uproszczać

Ta funkcja jest zdefiniowana w module sympy.simplify. simplify () próbuje zastosować inteligentną heurystykę, aby wyrażenie wejściowe było „prostsze”. Poniższy kod przedstawia uproszczenie wyrażenia $ sin ^ 2 (x) + cos ^ 2 (x) $.

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

Powyższy fragment kodu daje następujące dane wyjściowe -

1

rozszerzać

Expand () jest jedną z najczęściej używanych funkcji upraszczających w SymPy, używaną do rozwijania wyrażeń wielomianowych. Na przykład -

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

Powyższy fragment kodu daje wynik odpowiadający poniższemu wyrażeniu -

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

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

Powyższy fragment kodu daje wynik odpowiadający poniższemu wyrażeniu -

$a^2 - b^2$

Funkcja expand () sprawia, że ​​wyrażenia są większe, a nie mniejsze. Zwykle tak jest, ale często wyrażenie staje się mniejsze po wywołaniu na nim funkcji expand ().

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

Powyższy fragment kodu daje następujące dane wyjściowe -

-2

czynnik

Ta funkcja przyjmuje wielomian i rozkłada go na czynniki nieredukowalne na liczbach wymiernych.

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

Powyższy fragment kodu daje wynik odpowiadający poniższemu wyrażeniu -

$z(x + 2y)^2$

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

Powyższy fragment kodu daje wynik odpowiadający poniższemu wyrażeniu -

$(x + 1)^2$

Funkcja factor () jest przeciwieństwem funkcji expand (). Każdy z czynników zwracanych przez factor () jest gwarantowany jako nieredukowalny. Funkcja factor_list () zwraca bardziej ustrukturyzowane dane wyjściowe.

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

Powyższy fragment kodu daje wynik odpowiadający poniższemu wyrażeniu -

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

zbierać

Ta funkcja zbiera dodatkowe warunki wyrażenia w odniesieniu do listy wyrażeń aż do potęg z wymiernymi wykładnikami.

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

Powyższy fragment kodu daje wynik odpowiadający poniższemu wyrażeniu -

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

Funkcja collect () w tym wyrażeniu daje następujące wyniki -

>>> collect(expr,x)

Powyższy fragment kodu daje wynik odpowiadający poniższemu wyrażeniu -

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

Powyższy fragment kodu daje wynik odpowiadający poniższemu wyrażeniu -

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

Anuluj

Funkcja cancel () przyjmie dowolną funkcję wymierną i umieści ją w standardowej postaci kanonicznej p / q, gdzie p i q są rozszerzonymi wielomianami bez wspólnych czynników. Wiodące współczynniki p i q nie mają mianowników, tj. Są liczbami całkowitymi.

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

Powyższy fragment kodu daje wynik odpowiadający poniższemu wyrażeniu -

$x+1$

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

Powyższy fragment kodu daje wynik odpowiadający poniższemu wyrażeniu -

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

>>> cancel(expr)

Powyższy fragment kodu daje wynik odpowiadający poniższemu wyrażeniu -

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

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

Powyższy fragment kodu daje wynik odpowiadający poniższemu wyrażeniu -

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

Trigsimp

Ta funkcja służy do uproszczenia tożsamości trygonometrycznych. Można zauważyć, że konwencją nazewnictwa dla odwrotnych funkcji trygonometrycznych jest dodanie litery a na początku nazwy funkcji. Na przykład odwrotny cosinus lub łuk cosinus nazywa się 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

Funkcja trigsimp wykorzystuje heurystykę do zastosowania najlepiej dopasowanej tożsamości trygonometrycznej.

powersimp

Ta funkcja redukuje dane wyrażenie, łącząc potęgi o podobnych podstawach i wykładnikach.

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

Powyższy fragment kodu daje wynik odpowiadający poniższemu wyrażeniu -

$x^y x^z y^z$

>>> powsimp(expr)

Powyższy fragment kodu daje wynik odpowiadający poniższemu wyrażeniu -

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

Możesz sprawić, że funkcja powsimp () będzie tylko łączyć podstawy lub tylko łączyć wykładniki, zmieniając kombinację = 'podstawa' lub łączenie = 'exp'. Domyślnie connect = 'all', co robi oba. Jeśli force ma wartość True, wtedy bazy zostaną połączone bez sprawdzania założeń.

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

Powyższy fragment kodu daje wynik odpowiadający poniższemu wyrażeniu -

$x^y(xy)^z$

grzebień

Wyrażenia kombinatoryczne obejmujące silnię i dwumiany można uprościć za pomocą funkcji combsimp (). SymPy udostępnia funkcję silnia ()

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

Powyższy fragment kodu daje wynik odpowiadający poniższemu wyrażeniu -

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

Aby uprościć powyższe wyrażenie kombinatoryczne, używamy funkcji combsimp () w następujący sposób -

>>> combsimp(expr)

Powyższy fragment kodu daje wynik odpowiadający poniższemu wyrażeniu -

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

Dwumian (x, y) to liczba sposobów wyboru y elementów z zestawu x różnych elementów. Często jest również zapisywany jako xCy.

>>> binomial(x,y)

Powyższy fragment kodu daje wynik odpowiadający poniższemu wyrażeniu -

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

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

Powyższy fragment kodu daje wynik odpowiadający poniższemu wyrażeniu -

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

logcombine

Ta funkcja bierze logarytmy i łączy je, stosując następujące zasady -

  • log (x) + log (y) == log (x * y), jeśli oba są dodatnie
  • a * log (x) == log (x ** a) jeśli x jest dodatnie, a a jest rzeczywiste
>>> logcombine(a*log(x) + log(y) - log(z))

Powyższy fragment kodu daje wynik odpowiadający poniższemu wyrażeniu -

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

Jeśli parametr siły tej funkcji jest ustawiony na True, wówczas powyższe założenia zostaną przyjęte, jeśli nie ma już założeń dotyczących ilości.

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

Powyższy fragment kodu daje wynik odpowiadający poniższemu wyrażeniu -

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