Решите дифференциальное уравнение с SymPy

У меня есть следующее дифференциальное уравнение, которое я хотел бы решить с помощью SymPy

введите здесь описание изображения

Это дифференциальное уравнение имеет неявное решение (при h(0) = [0,1) и t = [0, inf))

введите здесь описание изображения

но SymPy дает

введите здесь описание изображения

которые могут найти другие пакеты, такие как Maxima. Однако с SymPy я не могу. Есть ли способ сделать это? Мой код

import sympy as sp
sp.init_printing(use_unicode=True)
h = sp.symbols('h', function=True)
t = sp.symbols('t')
eq = sp.Eq(sp.Derivative(h(t),t), (1 - h(t))**sp.Rational(4,3) / h(t))
sp.dsolve(eq)

person Chiel    schedule 25.07.2017    source источник


Ответы (1)


SymPy оставляет интеграл невычисленным, потому что он не уверен в знаке 1-y в интеграле.

Дифференциальное уравнение имеет сингулярность при h=1, и его поведение зависит от того, по какую сторону от 1 мы находимся. Невозможно сказать, что h(t) ‹ 1, но можно заменить h(t) = 1 - g(t), где g — положительная функция:

g = sp.symbols('g', function=True, positive=True)
eq1 = eq.subs(h(t), 1 - g(t))
print(sp.dsolve(eq1))

Это возвращает явное решение ОДУ (на самом деле их три, поскольку SymPy решает кубическое уравнение). Первый из них выглядит разумным.

Eq(g(t), (-2*(C1 + t)/(sqrt(-8*(C1 + t)**3 + 729) + 27)**(1/3) - (sqrt(-8*(C1 + t)**3 + 729) + 27)**(1/3))**3/27)
person Community    schedule 25.07.2017
comment
Интересно. Нет ли способа сделать некоторые предположения относительно h(t), т. е. меньше 1 и больше или равно 0? - person Chiel; 26.07.2017
comment
Неотрицательный: да, меньше 1: нет. См. docs.sympy.org/latest/modules/< /а> - person ; 26.07.2017
comment
Хм, жаль. При таком уровне сложности решение вручную кажется более простым. - person Chiel; 26.07.2017