Python - Scipy:ode 模块:启用求解器的 step 选项的问题

Posted

技术标签:

【中文标题】Python - Scipy:ode 模块:启用求解器的 step 选项的问题【英文标题】:Python - Scipy : ode module : issue enabling the step option of the solver 【发布时间】:2013-03-09 14:20:07 【问题描述】:

当我调用它时,我想存储求解器本身采取的不同集成步骤:

solver1.integrate(t_end)

所以我做了一个while循环并启用了step选项,将其值设置为True

while solver1.successful() and solver1.t < t0+dt:
    solver1.integrate(t_end,step=True)
    time.append(solver1.t)

然后我绘制y,这是整合的结果,我的问题来了。我在定位区域出现不稳定:

我认为这是因为循环或类似的原因,所以我检查了删除 step 的结果:

while solver1.successful() and solver1.t < t0+dt:
    solver1.integrate(t_end)

惊喜……我得到了正确的结果:

这是一个非常奇怪的情况......如果你们的人能帮助我解决这个问题,我将不胜感激。

编辑:

设置求解器:

solver1 = ode(y_dot,jac).set_integrator('vode',with_jacobian=True)
solver1.set_initial_value(x0,t0)

我使用.append() 存储结果

【问题讨论】:

你能再展示一些你的代码,你是如何设置求解器并存储结果以进行绘图的吗? 当然,我刚刚编辑了我的问题。 您仍然没有显示您如何实际存储您正在绘制的当前 ODE 状态,假设这些图显示了 ODE 状态变量之一。 【参考方案1】:

当您设置step=True 时,您间接地给vode._integrator.runner(一个Fortran 子例程)一个使用itask=2 的指令,默认为itask=1。你可以得到更多关于这个runner做的细节:

r._integrator.runner?

在 SciPy 0.12.0 文档中,您不会找到关于不同 itask=1itask=2、but you can find it here 发生了什么的解释:

ITASK  = An index specifying the task to be performed.
!          Input only. ITASK has the following values and meanings.
!          1  means normal computation of output values of y(t) at
!             t = TOUT(by overshooting and interpolating).
!          2  means take one step only and return.
!          3  means stop at the first internal mesh point at or
!             beyond t = TOUT and return.
!          4  means normal computation of output values of y(t) at
!             t = TOUT but without overshooting t = TCRIT.
!             TCRIT must be input as RUSER(1). TCRIT may be equal to
!             or beyond TOUT, but not behind it in the direction of
!             integration. This option is useful if the problem
!             has a singularity at or beyond t = TCRIT.
!          5  means take one step, without passing TCRIT, and return.
!             TCRIT must be input as RUSER(1).

【讨论】:

以上是关于Python - Scipy:ode 模块:启用求解器的 step 选项的问题的主要内容,如果未能解决你的问题,请参考以下文章

通过 Python 并行求解具有大量初始条件的 ODE

访问 Scipy ode 求解器的内部步骤

如何使用 scipy.integrate.odeint 求解具有时间相关变量的 ODE 系统

scipy.integrate.ode 与两个耦合的 ODE?

scipy.integrate.odeint 和 scipy.integrate.ode 有啥区别?

scipy.integrate.ode 放弃集成