【问题标题】:Running ode, dopri5 method, error: unsupported operand type 'ode'运行 ode,dopri5 方法,错误:不支持的操作数类型 'ode'
【发布时间】: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)

标签: python ode


【解决方案1】:

ode类的构造函数的返回值是ode类型的实例对象。在这一点上,没有发生整合。为此,您需要调用积分器的阶跃函数。在该步骤之后,新状态位于ode 对象的y 字段中。

有关详细信息,请参阅 ode 类的文档。

您应该注意到,您既没有将初始条件也没有将积分间隔的结束传递给积分器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-27
    • 2020-07-27
    相关资源
    最近更新 更多