SymPy - solwery

Ponieważ symbole = i == są zdefiniowane jako operatory przypisania i równości w Pythonie, nie można ich używać do formułowania równań symbolicznych. SymPy udostępnia funkcję Eq () do tworzenia równania.

>>> from sympy import * 
>>> x,y=symbols('x y') 
>>> Eq(x,y)

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

x = y

Ponieważ x = y jest możliwe wtedy i tylko wtedy, gdy xy = 0, powyższe równanie można zapisać jako -

>>> Eq(x-y,0)

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

x − y = 0

Moduł solver w SymPy udostępnia funkcję soveset (), której prototyp wygląda następująco -

solveset(equation, variable, domain)

Domena to domyślnie S.Complexes. Korzystając z funkcji solveset (), możemy rozwiązać równanie algebraiczne w następujący sposób -

>>> solveset(Eq(x**2-9,0), x)

Uzyskuje się następujący wynik -

{−3, 3}

>>> solveset(Eq(x**2-3*x, -2),x)

Poniższe dane wyjściowe są uzyskiwane po wykonaniu powyższego fragmentu kodu -

{1,2}

Dane wyjściowe zestawu solveset to FiniteSet rozwiązań. Jeśli nie ma rozwiązań, zwracany jest EmptySet

>>> solveset(exp(x),x)

Poniższe dane wyjściowe są uzyskiwane po wykonaniu powyższego fragmentu kodu -

$\varnothing$

Równanie liniowe

Aby rozwiązać równania liniowe, musimy użyć funkcji linsolve ().

Na przykład równania są następujące -

xy = 4

x + y = 1

>>> from sympy import * 
>>> x,y=symbols('x y') 
>>> linsolve([Eq(x-y,4),Eq( x + y ,1) ], (x, y))

Poniższe dane wyjściowe są uzyskiwane po wykonaniu powyższego fragmentu kodu -

$\lbrace(\frac{5}{2},-\frac{3}{2})\rbrace$

Funkcja linsolve () może również rozwiązywać równania liniowe wyrażone w postaci macierzy.

>>> a,b=symbols('a b') 
>>> a=Matrix([[1,-1],[1,1]]) 
>>> b=Matrix([4,1]) 
>>> linsolve([a,b], (x,y))

Otrzymamy następujące dane wyjściowe, jeśli wykonamy powyższy fragment kodu -

$\lbrace(\frac{5}{2},-\frac{3}{2})\rbrace$

Równanie nieliniowe

W tym celu używamy funkcji nonlinsolve (). Równania dla tego przykładu -

a 2 + a = 0 ab = 0

>>> a,b=symbols('a b') 
>>> nonlinsolve([a**2 + a, a - b], [a, b])

Otrzymamy następujące dane wyjściowe, jeśli wykonamy powyższy fragment kodu -

$\lbrace(-1, -1),(0,0)\rbrace$

równanie różniczkowe

Najpierw utwórz niezdefiniowaną funkcję, przekazując cls = Function do funkcji symbols. Aby rozwiązać równania różniczkowe, użyj funkcji dsolve.

>>> x=Symbol('x') 
>>> f=symbols('f', cls=Function) 
>>> f(x)

Poniższe dane wyjściowe są uzyskiwane po wykonaniu powyższego fragmentu kodu -

f(x)

Tutaj f (x) jest niedocenianą funkcją. Jego pochodna jest następująca -

>>> f(x).diff(x)

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

$\frac{d}{dx}f(x)$

Najpierw tworzymy obiekt Eq odpowiadający następującemu równaniu różniczkowemu

>>> eqn=Eq(f(x).diff(x)-f(x), sin(x)) 
>>> eqn

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

$-f(x) + \frac{d}{dx}f(x)= \sin(x)$

>>> dsolve(eqn, f(x))

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

$f(x)=(c^1-\frac{e^-xsin(x)}{2}-\frac{e^-xcos(x)}{2})e^x$