`scipy.integrate.odeint` 自动调整时间步长
`scipy.integrate.odeint` automatically adjusts time steps
我正在使用 scipy.integrate.odeint
在 space 和时间维度上求解 ODE(扩散方程)。 space 导数我用有限差分表示,所以整个问题就是一个时间问题。
解算器可以工作,但它似乎会自动调整时间间隔和总时间(同时步数保持不变)。当我将结果与不调整时间间隔的简单 FCTS 方案进行比较时,它总是看起来不同。
我意识到 odeint
使用的实际时间步长是通过 infodict['tcur']
返回的。这是否意味着我总是必须针对这些时间绘制最终的解决方案?为什么在 SciPy 文档中有不同的解释? (在这个例子中,他们针对参数 t
作图,即我传递给 odeint
的初始时间。)
编辑:
最终,这是我的代码中的一个错误。我将时间步长的索引传递给 odeint
例程,而不是时间步长本身。不管怎样,谢谢你的解释。
odeint
使用了两个时间步长:
采样步骤,这是积分器returns给你结果的时间间隔。
这是由你控制的,通常你会select这个等距离。
积分步骤,这是积分算法使用的时间离散化。
这是自动调整的,以确保(估计的)积分误差不会太高。
还选择了采样步骤,以便准确地执行采样步骤(因此您可以在那里获得输出)。
一个采样步骤由不同数量的积分步骤组成,但至少有一个。
在大多数情况下,集成步骤是在集成器的幕后发生的,您无需处理。
The solver works but it seems to automatically adjust the time intervals and total times (while the number of steps stays constant).
这不应该是这样的。
总时间和采样步骤应始终是您在参数 t
中指定的值。
你的结果与 FCTS 方案的结果不同也可能是后者的错。
您可能想要进行的一项简单完整性检查是降低精度阈值(rtol
和 atol
),这将导致更小的积分步长(除非您的采样步长非常小)。
这应该不会显着影响您的结果。
I realized that the actual time steps odeint
uses are returned via infodict['tcur']
. Does this mean I always have to plot the resulting solution against these times?
不,在大多数情况下,infodict['tcur']
会比您的解决方案长,因为集成步骤多于采样步骤。
SciPy 文档是正确的。
我正在使用 scipy.integrate.odeint
在 space 和时间维度上求解 ODE(扩散方程)。 space 导数我用有限差分表示,所以整个问题就是一个时间问题。
解算器可以工作,但它似乎会自动调整时间间隔和总时间(同时步数保持不变)。当我将结果与不调整时间间隔的简单 FCTS 方案进行比较时,它总是看起来不同。
我意识到 odeint
使用的实际时间步长是通过 infodict['tcur']
返回的。这是否意味着我总是必须针对这些时间绘制最终的解决方案?为什么在 SciPy 文档中有不同的解释? (在这个例子中,他们针对参数 t
作图,即我传递给 odeint
的初始时间。)
编辑:
最终,这是我的代码中的一个错误。我将时间步长的索引传递给 odeint
例程,而不是时间步长本身。不管怎样,谢谢你的解释。
odeint
使用了两个时间步长:
采样步骤,这是积分器returns给你结果的时间间隔。 这是由你控制的,通常你会select这个等距离。
积分步骤,这是积分算法使用的时间离散化。 这是自动调整的,以确保(估计的)积分误差不会太高。 还选择了采样步骤,以便准确地执行采样步骤(因此您可以在那里获得输出)。 一个采样步骤由不同数量的积分步骤组成,但至少有一个。 在大多数情况下,集成步骤是在集成器的幕后发生的,您无需处理。
The solver works but it seems to automatically adjust the time intervals and total times (while the number of steps stays constant).
这不应该是这样的。
总时间和采样步骤应始终是您在参数 t
中指定的值。
你的结果与 FCTS 方案的结果不同也可能是后者的错。
您可能想要进行的一项简单完整性检查是降低精度阈值(rtol
和 atol
),这将导致更小的积分步长(除非您的采样步长非常小)。
这应该不会显着影响您的结果。
I realized that the actual time steps
odeint
uses are returned viainfodict['tcur']
. Does this mean I always have to plot the resulting solution against these times?
不,在大多数情况下,infodict['tcur']
会比您的解决方案长,因为集成步骤多于采样步骤。
SciPy 文档是正确的。