如何找到 scipy.integrate.ode 的默认 atol 和 rtol?

Posted

技术标签:

【中文标题】如何找到 scipy.integrate.ode 的默认 atol 和 rtol?【英文标题】:How to find the default atol and rtol for scipy.integrate.ode? 【发布时间】:2017-08-31 23:00:31 【问题描述】:

如何找到scipy.integrate.ode中的默认参数?具体来说,atolrtol 在积分器 dopri5?可以使用set_integrator方法设置参数,但是如果我不设置它们,我看不到任何查询它的方法来找出它正在使用的东西。

【问题讨论】:

【参考方案1】:

据我所知,找出答案的唯一方法是查看the source。在那里,从第 966 行开始(截至目前),您会发现:

class dopri5(IntegratorBase):

    […]

    def __init__(self,
                 rtol=1e-6, atol=1e-12,
                 nsteps=500,
                 max_step=0.0,
                 […]
                 ):

所以,dopri 的默认绝对容差是 10⁻¹²,默认相对容差是 10⁻⁶。 (是的,这应该记录在案。)

【讨论】:

不错。我真的应该想到这一点。 @PeterB:不过,您不需要这样做。我们很高兴这些参数是在 Python 级别设置的,而不是隐藏在某些移植的 Fortran 例程中。 @Wrzlprmft 在github.com/scipy/scipy/issues 上为此创建一个问题怎么样?【参考方案2】:

查看 ode() 的源代码,您可以通过执行以下操作来检查您已实例化的 ode 的积分器:

r = ode(f)
print('atol:', r._integrator.atol)
print('rtol:', r._integrator.rtol)

【讨论】:

这应该是例外的答案,因为它回答了如何从生成的 python 对象中获取值,而不是通过查看可能在版本之间更改的源代码。

以上是关于如何找到 scipy.integrate.ode 的默认 atol 和 rtol?的主要内容,如果未能解决你的问题,请参考以下文章

scipy.integrate.ode 放弃集成

多个 scipy.integrate.ode 实例

scipy.integrate.ode 的内部工作

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

通过 scipy.integrate.ode 使用自适应步长

将 numba.jit 与 scipy.integrate.ode 一起使用