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$