Использование символов в решениях системы дифференциальных уравнений с помощью sympy (python)

#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!