ODE 自适应时间步长:使用“变化的时间尺度”来选择时间步长大小是不是很糟糕

计算科学 自适应时间步长
2021-12-03 01:47:46

假设您想使用某种数值方法(欧拉、RK、BDF 等)近似求解一个 ODE 系统:

dudt=f(u)

为此,您需要选择将 ODE 求解到某个可容忍精度的时间步长。选择时间步长的一种方法是查看每个变量的变化时间尺度,并选择与最小时间尺度相关的时间步长:

Δt=αmin(uf(u))

这里,α是某个常数,Δt是时间步长。我见过很多天文学和行星科学领域的人使用这种方法。

问题:这是一种“坏”的方法吗?

对我来说似乎不是最好的。使用嵌入式 runge-kutta 之类的东西进行步长控制似乎要好得多,它选择允许小于某些指定错误(rtol 或 atol)的最大时间步长。

2个回答

如前所述,没有拒绝机制,即在一步可能失败后减小步长的能力。这对于具有牛顿步的隐式方法是必需的,因为有可能足够大以至于(准)牛顿不稳定,在这种情况下它需要及时回调。这种不稳定性有时可以通过收敛速度看出,但在其他情况下,它会被这里不存在的后验误差估计器捕获。此外,它依赖于线性误差估计,而后验估计量在使用步骤中的多个值时本质上是非线性的,因此这对于非常非线性的问题可能不正确。这些事实共同意味着该方法可能仅适用于非刚性或至多半刚性 (PDE) 问题。Δt

然而,更大的因素之一是它只是次优的。嵌入式误差估计能够通过 0 个额外的计算获得非线性误差估计。这给出了一个带有 1 个额外计算的线性误差估计,这意味着它可能比开发为具有内部误差估计器的方法更昂贵,但鲁棒性较差。出于这个原因,在实践中使用的任何非刚性 ODE 求解器中看到它时,我都会感到惊讶。也就是说,如果选择得足够小以保证稳定性并且愿意计算再几次。ffαf

我不认为这是一个不好的方法,但它也不是选择时间步长的非常精确的方法。

诚然,我以前没有遇到过这种时间步启发式方法,但是查看线性测试问题可以了解为什么这是合理的。对于,条件变为这看起来与线性稳定性分析中的时间步长限制完全相同,其中与稳定区域的大小有关。对于在空间中离散化的线性偏微分方程,该条件看起来非常像 CFL 条件(如果我们将您的条件推广到向量值),因为您可以得到形式为y=λyΔt=αλαfΔt=αO(Δxk). 所以对我来说,这种启发式方法似乎受到(线性)稳定性的指导,并作为时间步长的合理上限。

相反,基于嵌入式方法的更标准和流行的时间步长控制器由每一步提交的局部截断误差的近似值引导。稳定性在这里并不是真正的直接考虑因素。标准方法还通过公差提供更多控制,并且可以逐级更改。但是,有时嵌入式方法并不容易获得,因此这确实为“变化的时间尺度”方法提供了一些可信度。

编辑:再想一想,我遇到了一些与奇异扰动问题大致相似的事情: ,在初始瞬态阶段,时间步长需要在的数量级上,以确保稳定性和准确性。经过这个瞬态阶段,解决方案是平滑和僵硬的。对于某些方法,例如 B-convergent Runge-Kutta,纯粹根据时间尺度选择时间步将迫使您采取比所需步长小得多的步长。y=ε1f(y)0<ε1O(1/ε)ε

编辑2:为了清楚起见,我同意你的评估。标准误差控制器在大多数方面都比较出色,如果我无法估计一个步骤的局部截断误差,我只会考虑“变化的时间尺度”。