为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕村9548890 2022-06-02 11:24:33
从Sympy1.2 版开始,pythonSympy已经实现了在给定一些初始条件的情况下求解简单微分方程中的常数的能力。我试图测试此功能,但不断收到我不知道如何解决的错误。文档指出了初始条件的以下格式,并且我尝试遵循实现该功能的实际拉取请求中指定的内容。这是代码和错误。import sympy as spt = 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
查看完整描述

1 回答

?
慕村225694

TA贡献1880条经验 获得超4个赞

我不是 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 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 会产生另一个错误。文档告诉 sympy 应该能够正确猜测它,所以我把它省略了 - 只是为了找到正确的参数,x(t)稍后会出现)


这给了我 res =


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


查看完整回答
反对 回复 2022-06-02
  • 1 回答
  • 0 关注
  • 138 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信