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
保留为默认值。