#python #sympy
#python #sympy
Вопрос:
Я пытаюсь решить 2 связанных ODE, используя dsolve из sympy:
import sympy as sp
t, gamma = sp.symbols('t, gamma', real=True)
rho1, rho2 = sp.symbols('rho_1, rho_2', cls=Function)
drho1 = sp.Derivative(rho1(t), t)
drho2 = sp.Derivative(rho2(t), t)
eq1 = sp.Eq(drho1, - 2*gamma*(rho1(t) - rho2(t)))
eq2 = sp.Eq(drho2, - 2*(rho2(t) rho1(t)))
eq = (eq1,eq2)
sp.dsolve(eq)
Дело в том, что когда символ гамма (который является неопределенной константой) добавляется к моим уравнениям, как указано выше, у меня появляется следующее сообщение об ошибке:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-15-e7f194f9576a> in <module>()
13 eq = (eq1,eq2)
14
---> 15 sp.dsolve(eq, ics=ics)
3 frames
/usr/local/lib/python3.6/dist-packages/sympy/core/relational.py in __nonzero__(self)
193
194 def __nonzero__(self):
--> 195 raise TypeError("cannot determine truth value of Relational")
196
197 __bool__ = __nonzero__
TypeError: cannot determine truth value of Relational
Решения хороши, когда я удаляю гамму. Можно ли использовать символы в решениях ODE с использованием sympy?
Ответ №1:
Какую версию sympy вы используете?
Это отлично работает с 1.6.2:
In [4]: eqs = [eq1, eq2]
In [5]: eqs
Out[5]:
⎡d d ⎤
⎢──(ρ₁(t)) = -2⋅γ⋅(ρ₁(t) - ρ₂(t)), ──(ρ₂(t)) = -2⋅ρ₁(t) - 2⋅ρ₂(t)⎥
⎣dt dt ⎦
In [6]: sol = dsolve(eqs)
In [7]: sol
Out[7]:
⎡ ⎛ ______________ ⎞ ⎛ ______________ ⎞ ⎛ ______________ ⎞ ⎛ ______________ ⎞
⎢ ⎜ ╱ 2 ⎟ ⎜ ╱ 2 ⎟ ⎜ ╱ 2 ⎟ ⎜ ╱ 2 ⎟
⎢ ⎜γ ╲╱ γ - 6⋅γ 1 1⎟ t⋅⎝-γ - ╲╱ γ - 6⋅γ 1 - 1⎠ ⎜γ ╲╱ γ - 6⋅γ 1 1⎟ t⋅⎝-γ ╲╱ γ - 6⋅γ 1 - 1⎠
⎢ρ₁(t) = C₁⋅⎜─ ───────────────── - ─⎟⋅ℯ C₂⋅⎜─ - ───────────────── - ─⎟⋅ℯ , ρ₂(
⎣ ⎝2 2 2⎠ ⎝2 2 2⎠
⎛ ______________ ⎞ ⎛ ______________ ⎞⎤
⎜ ╱ 2 ⎟ ⎜ ╱ 2 ⎟⎥
t⋅⎝-γ - ╲╱ γ - 6⋅γ 1 - 1⎠ t⋅⎝-γ ╲╱ γ - 6⋅γ 1 - 1⎠⎥
t) = C₁⋅ℯ C₂⋅ℯ ⎥
⎦
Комментарии:
1. Я обновил версию sympy до 1.6.2, как вы сказали, и это сработало. Спасибо @Oscar Benjamin!