如何找到 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
中的默认参数?具体来说,atol
和 rtol
在积分器 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 与两个耦合的 ODE?