Python scipy.integrate.ode.integrate()可选的'step'和'relax'参数做什么?

Python scipy.integrate.ode.integrate()可选的'step'和'relax'参数做什么?,python,numpy,scipy,ode,numerical-integration,Python,Numpy,Scipy,Ode,Numerical Integration,我很清楚如何以最简单的形式使用scipy.integrate.ode.integrate(t)函数,但API指出它还包含两个可选参数,即step和relax。当前没有关于这些参数的信息,也没有在中使用这些参数。我想知道,它们是做什么的,在某些情况下它们有用吗?存在步骤和松弛参数,允许用户只运行部分积分算法,而不是完全积分。它们对于测试算法的内部结构很有用,但对于普通用户来说并不是特别有用 这两个参数都被视为布尔标志,以选择不同类型的部分积分。如果step为True(非零),则integrate(

我很清楚如何以最简单的形式使用
scipy.integrate.ode.integrate(t)
函数,但API指出它还包含两个可选参数,即
step
relax
。当前没有关于这些参数的信息,也没有在中使用这些参数。我想知道,它们是做什么的,在某些情况下它们有用吗?

存在
步骤
松弛
参数,允许用户只运行部分积分算法,而不是完全积分。它们对于测试算法的内部结构很有用,但对于普通用户来说并不是特别有用

这两个参数都被视为布尔标志,以选择不同类型的部分积分。如果
step
为True(非零),则
integrate()
运行积分器的
step()
方法,其docstring表示
“执行一个积分步骤并返回(y1,t1)。”
基本上它只运行正常积分过程中的一个步骤

如果
relax
为True(非零),则
integrate()
运行积分器的
run\u relax()
方法,其docstring表示
“从t=t0到t>=t1进行积分并返回(y1,t)。”
基本上,它运行积分直到通过所需的值,但不执行额外的返回到指定值的步骤

这一切都可以从中看出



编辑:我在SciPy中打开了一个Pull请求来澄清这些文档:

这是否意味着默认情况下
step=False
会抛出所有中间步骤?还有,你所说的后退是什么意思?这只是一个插值吗?如果在循环中运行
integrate
方法,这两种行为看起来都很奇怪。在第一种情况下,您会丢失很多有用的信息,并且可能会重新做很多不必要的工作。在第二种情况下,您正在累积插值的误差。我有什么误解吗?是的,
step=False
在算法中抛出中间结果,是的,后面的步骤是插值。如果你真的对算法的细节感兴趣,我建议你阅读
step=True
相当于设置
ITASK=2
relax=True
相当于设置
ITASK=3
。我主要感兴趣的是完全理解API,而不是实现细节。另外,还有其他可以用来代替vode的积分器,如lsoda或dopri5.OK,但要注意,
step=True
会做一些奇怪的事情:特别是,如果你要求时间
t
,它只会走一段路,除非我弄错了,它不允许您访问对应于单个步骤结束的实际时间。正如我所说的,我认为除了探索实现的内部结构之外,它没有什么用处。另外,如果设置
step=True
,则不会引用
relax
的值。您不能同时执行这两个操作,因为它们是对底层Fortran例程的完全不同的调用。如果您使用积分器来解决问题,我建议将
step
relax
保留为默认值。