【发布时间】:2017-05-12 09:02:43
【问题描述】:
我是一名初级程序员,我想使用 ode 'dopri5' 集成一个函数,但我认为我做得不对。参考没有太大帮助,我遇到了一个我不认识的错误。所以,最初我使用的是 odeint,它工作正常。这是这段代码:
Itmp = odeint(te.rhs, Itmp, [xLim[i], xLim[i+1]], mxstep=10000,
atol=1e-11, rtol=1e-11, args=(f,))[1]
我尝试使用 dopri5 进行集成是这样的:
Itmp = ode(te.rhs).set_integrator('dopri5', max_step=10000,atol=1e-11, rtol=1e-11)
我得到的错误是说 Itmp 是 'ode' 类型,而我需要它是一个浮点数,就像 odeint 给我的那样。
这是具体的错误,(我尝试从浮点数中减去 Itmp):
unsupported operand type(s) for -: 'ode' and 'float'
当我使用 python 调试器并尝试打印出 Itmp 时,它给了我
<scipy.integrate._ode.ode object at 0x10d6ab410>
在我继续之后,它会因上述错误而停止。我猜我没有正确写出 ode 命令。任何帮助将不胜感激!
【问题讨论】:
-
你能发一个minimal reproducible example吗?就目前而言,很难说出您的问题源自何处。唯一想到的是,您对初始条件和积分器对象 (
Itmp) 使用相同的变量名称,这是非常糟糕的做法,可能会导致错误。 -
您是否考虑了 ODE 函数的不同参数顺序?
odeint需要odefunc(state, time),ode使用odefunc(time, state)。