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$