2

Как простые линейные дифференциальные уравнения, подобные этому, решаются в sympy?Как решить линейные дифференциальные уравнения первого порядка аналитически и численно с помощью sympy?

y' + p(t)y = q(t) 

Я ищу решить двумя способами: символически (аналитически), если это возможно, если SymPy можно получить интегрирующий фактор и т.д., а также способ сделать это численно, так что два может быть в сравнении. как это можно сделать в sympy? sympy.mpmath.odefun - подходящее место для поиска?

+0

Для символического решения ODE я рекомендовал вам попробовать на wolframalpha, они обычно находят решение, если оно есть. И поскольку вы используете python, scipy имеет числовой метод: http://docs.scipy.org/doc/scipy/reference/generated/scipy.integrate.ode.html – lolopop

ответ

2

Here и here приведены некоторые примеры.

Что касается вашей проблемы, вы можете написать уравнение, как:

у»+ р (т) у - д (т) = 0

и затем использовать dsolve().

import sympy 

t = sympy.Symbol('t') 

y = sympy.Function('y')(t)  
p = sympy.Function('p')(t) 
q = sympy.Function('q')(t) 

y_ = sympy.Derivative(y, t) 

# y' + p(t)y - q(t) 
sol = sympy.dsolve(y_ + p*y - q, y) 

print(sol) 

Решение как функция

(Примечание: Это быстрое решение я придумал, читая документацию, я не испытывал с sympy Там может быть гораздо более эффективные способы.. чтобы сделать следующее.)

Предположим, что вы хотите решить y' = y.

from sympy import * 

t = symbols('t') 

y = Function('y')(t) 
y_ = Derivative(y, t) 

sol = dsolve(y_ - y, y) 

Мы сделали то же, что и ранее. Теперь, чтобы использовать вторую часть sol, мы используем .args[1]. Затем мы создаем функцию f(t_) и подставляем значение t, используя subs().

def f(t_): 
    return sol.args[1].subs([(t, t_)]) 

print(sol) 
print(f(0)) 
Смежные вопросы