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

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


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


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


慕村9548890
浏览 139回答 1
1回答

慕村225694

我不是 sympy 的重度用户,但我得到了它的工作 - 问题是当你定义时x = sp.Function('x')(t)你已经得到了t它的参数,并且不能再0在行中传递它 - with (t)res = sp.dsolve(diffeq, t, ics={x(0): 0, sp.diff(x(t), t).subs(t,0): 0})的调用使得x它是一个“定义的函数”。所以,x作为一个未定义的函数,只t在创建微分方程时需要的点传递它是要走的路:import sympy as spt = sp.symbols('t')x = sp.Function('x')diffeq = sp.Eq(x(t).diff(t, t) - x(t), sp.cos(t))&nbsp;res = sp.dsolve(diffeq, ics={x(0): 0, sp.diff(x(t), t).subs(t,0): 0})(另外,尝试传入t第二个参数 do dsolve 会产生另一个错误。文档告诉 sympy 应该能够正确猜测它,所以我把它省略了 - 只是为了找到正确的参数,x(t)稍后会出现)这给了我 res =Eq(x(t), exp(t)/4 - cos(t)/2 + exp(-t)/4)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python