Sympy:求解具有初始条件误差的微分方程

Sympy: solving differential equation with initial conditions error

Sympy 1.2 版以来,python Sympy 已经实现了在给定一些初始条件的情况下求解简单微分方程中的常数的能力。我试图测试此功能,但不断收到我不知道如何解决的错误。

documentation 表示初始条件的以下格式,我尝试遵循实现该功能的实际拉取请求中指定的内容。这是代码和错误。

import sympy as sp

t = sp.symbols('t')
x = sp.Function('x')(t)

diffeq = sp.Eq(x.diff(t,t) - x, sp.cos(t))
res = sp.dsolve(diffeq, t, ics={x(0): 0, 
                            x.diff(t).subs(t, 0): 0})

错误是:

Traceback (most recent call last):

  File "<ipython-input-20-75c3e1d53138>", line 1, in <module>
    res = sp.dsolve(diffeq, t, ics={x(0): 0, sp.diff(x(t), t).subs(t,0): 0})

TypeError: 'x' object is not callable

我不是 sympy 的重度用户,但我让它工作了 - 问题是当你定义 x = sp.Function('x')(t) 你已经得到了 参数 t 给它,并且不能再在行中为它传递 0 res = sp.dsolve(diffeq, t, ics={x(0): 0, sp.diff(x(t), t).subs(t,0): 0}) - 使用 (t) 调用 x 使其成为 "defined function".

因此,将 x 保留为未定义的函数,并在创建微分方程时在需要的点处为其传递 t 是可行的方法:


import sympy as sp

t = sp.symbols('t')
x = sp.Function('x')

diffeq = sp.Eq(x(t).diff(t, t) - x(t), sp.cos(t)) 
res = sp.dsolve(diffeq, ics={x(0): 0, sp.diff(x(t), t).subs(t,0): 0})

(此外,尝试在第二个参数中传递 t do dsolve 会产生另一个错误。The docs 告诉 sympy 应该能够正确猜测它,所以我将其遗漏了 - 只是为了找到正确的参数会有 x(t) 之后)

这给了我 res =

Eq(x(t), exp(t)/4 - cos(t)/2 + exp(-t)/4)