SymPy - Решатели

Поскольку символы = и == определены в Python как операторы присваивания и равенства, их нельзя использовать для формулирования символьных уравнений. SymPy предоставляет функцию Eq () для создания уравнения.

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

Приведенный выше фрагмент кода дает результат, эквивалентный приведенному ниже выражению -

x = y

Поскольку x = y возможно тогда и только тогда, когда xy = 0, приведенное выше уравнение можно записать как -

>>> Eq(x-y,0)

Приведенный выше фрагмент кода дает результат, эквивалентный приведенному ниже выражению -

x − y = 0

Модуль решателя в SymPy предоставляет функцию soveset (), прототип которой выглядит следующим образом:

solveset(equation, variable, domain)

Домен по умолчанию S.Complexes. Используя функцию resolveset (), мы можем решить алгебраическое уравнение следующим образом:

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

Получен следующий результат -

{−3, 3}

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

Следующий результат получается после выполнения приведенного выше фрагмента кода -

{1,2}

Результатом решения является FiniteSet решений. Если решений нет, возвращается EmptySet.

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

Следующий результат получается после выполнения приведенного выше фрагмента кода -

$\varnothing$

Линейное уравнение

Мы должны использовать функцию linsolve () для решения линейных уравнений.

Например, уравнения следующие:

ху = 4

х + у = 1

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

Следующий результат получается после выполнения приведенного выше фрагмента кода -

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

Функция linsolve () также может решать линейные уравнения, выраженные в матричной форме.

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

Мы получим следующий вывод, если выполним приведенный выше фрагмент кода -

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

Нелинейное уравнение

Для этого мы используем функцию nonlinsolve (). Уравнения для этого примера -

а 2 + а = 0 ab = 0

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

Мы получим следующий вывод, если выполним приведенный выше фрагмент кода -

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

дифференциальное уравнение

Сначала создайте неопределенную функцию, передав cls = Function функции символов. Для решения дифференциальных уравнений используйте dsolve.

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

Следующий результат получается после выполнения приведенного выше фрагмента кода -

f(x)

Здесь f (x) - неоцененная функция. Его производная следующая -

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

Приведенный выше фрагмент кода дает результат, эквивалентный приведенному ниже выражению -

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

Сначала мы создаем объект Eq, соответствующий следующему дифференциальному уравнению

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

Приведенный выше фрагмент кода дает результат, эквивалентный приведенному ниже выражению -

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

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

Приведенный выше фрагмент кода дает результат, эквивалентный приведенному ниже выражению -

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