如何用sympy解析和数值求解一阶线性微分方程?
how to solve first-order linear differential equations analytically and numerically with sympy?
如何在 sympy
中求解像这样的简单线性微分方程?
y' + p(t)y = q(t)
我希望通过两种方式来解决它:如果可能的话,象征性地(分析地)解决,如果 sympy 可以推导出积分因子,等等,还有一种以数字方式解决的方法,以便可以比较两者。如何在 sympy
中完成此操作? sympy.mpmath.odefun
是正确的地方吗?
至于你的问题,你可以这样写你的等式:
y' + 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))
如何在 sympy
中求解像这样的简单线性微分方程?
y' + p(t)y = q(t)
我希望通过两种方式来解决它:如果可能的话,象征性地(分析地)解决,如果 sympy 可以推导出积分因子,等等,还有一种以数字方式解决的方法,以便可以比较两者。如何在 sympy
中完成此操作? sympy.mpmath.odefun
是正确的地方吗?
至于你的问题,你可以这样写你的等式:
y' + 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))