如何用sympy分析和数值地求解一阶线性微分方程?

时间:2015-03-07 16:41:36

标签: python scipy sympy numerical-methods differential-equations

如何在sympy中解决像这样的简单线性微分方程?

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

我希望以两种方式解决它:如果可能的话,象征性地(分析地)解决,如果sympy可以得出积分因子等,还可以用数字方式进行解算,以便可以比较两者。如何在sympy中完成?是sympy.mpmath.odefun正确的地方吗?

1 个答案:

答案 0 :(得分:2)

Herehere就是一些例子。

至于你的问题,你可以写下你的等式:

  

ý' + p(t)y - q(t)= 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_)并使用subs()替换t值。

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

print(sol)
print(f(0))