我可以使用显式时间步长方案来确定 ODE 是否是刚性的吗?

计算科学 刚性 时间积分
2021-12-21 04:52:49

我有一个 ODE:

u=1000u+sin(t)
u(0)=11000001

我知道这个特殊的 ODE 在分析上是僵硬的。我也知道,如果我们使用显式(前向)时间步长方法(Euler、Runge-Kutta、Adams 等),如果时间步长太大,该方法应该返回非常大的错误。所以,我有两个问题:

  1. 通常,当误差项的解析表达式不可用或无法导出时,这是如何确定 ODE 的刚性吗?

  2. 一般来说,当 ODE 很僵硬时,我如何确定“足够小”的时间步长?

3个回答

一个更好的看待它的方法是,对于一个僵硬的问题,任何稳定的显式计算都会导致一个比所需的容错小得多的误差

有许多使用显式方案自动检测刚度的好方法,尤其是嵌入式 Runge-Kutta 对。参见例如:

在 faleichik 的第二个例子中,随着步长的减小,当超过稳定的时间步长阈值时,人们会看到误差突然急剧下降到远低于典型所需容差的水平。因此,一个好的误差估计器确实会揭示问题的刚性。在第一个问题中,以稳定步长获得的误差将在典型的所需公差范围内,表明非刚度。

因此,请注意,如果需要足够严格的容错能力,任何问题都会变得不那么僵硬。

1. 我们能否仅通过应用显式方法在数值上检测刚度?

  • 假设您对某个 ODE 存在初始值问题[0,10]. 你采取相当大的步长τ=1和一个显式的欧拉方法,以恒定的步长进行计算 τ并获得以下几点:

    在此处输入图像描述

    您估计错误,它似乎很大。好,那你拿 τ=0.1并获得在此处输入图像描述

    误差估计现在是可以接受的。一步的大小τ=0.1相对较小[0,10].

    那么,这个问题很棘手吗?答案是否定的!这里需要小步长来正确再现解的振荡

    我们解决的问题是

    y(t)=2cosπt,y(0)=1.


  • 现在你在相同的时间间隔内取另一个 ODE,τ=1和显式欧拉给你几乎相同的数值解:

    在此处输入图像描述

    你拿τ=0.1现在数值解是

    在此处输入图像描述

    现在的误差估计很小。一步的大小τ=0.1相对较小[0,10].

    这个问题是硬的吗?是的我们已经采取了非常小的步骤来重现变化非常缓慢的解决方案。这是不合理的!这里时间步长的大小受到显式欧拉的稳定性属性的限制

    这个问题是

    y(t)=2y(t)+sint/2,y(0)=1.


请注意,如果我们采用更长的积分间隔,​​步长的数量可能会更大。


结论:有关时间步长和相应误差的信息不足以检测刚度。您还应该查看获得的解决方案。如果它变化缓慢并且步长非常小,则问题很可能是僵硬的。如果解决方案快速振荡并且您信任您的误差估计技术,那么这个问题并不难解决。


2.如何确定允许将刚性问题与显式方法集成的最大步长?

如果您使用一些带有自动步长控制的黑盒显式求解器,那么您无需做任何事情:该软件将自适应地采用所需的步长。

但是假设您想手动获得具有恒定步长的解决方案,或者只是想估计您应该等待多少小时,直到您的显式方法解决问题。然后你应该知道你的雅可比矩阵的频谱。假设它是真实的并且存在于[Λ,0](在你的例子中Λ=1000)。

然后,您应该计算显式方法的实际稳定性区间(复杂情况下的稳定性域)。这不是太难,您只需查阅有关此主题的任何教科书即可。在显式欧拉的情况下,这个区间是[2,0]. 现在,如果你想让你的解决方案不爆炸,你应该采取τ这样Λτ在于稳定区间,即在我们的例子中

τ2|Λ|.

如果你想要更多的一致性,你应该采取

τ1|Λ|,
因此1/|Λ|<τ2/|Λ|您的解决方案很可能会产生不自然(但逐渐消失)的振荡。

当然,这种分析主要适用于已知频谱的线性问题。对于更实际的问题,我们应该依靠刚度检测的数值方法(参见其他答案中的参考资料和评论)。

要回答您的问题:

  1. 据我所知,在实践中,如果显式方法需要相对于您感兴趣的时间尺度非常小的时间步长(请参阅这个问题的答案,了解 ODE 变得僵硬意味着什么)才能产生准确的结果,那么对于所有的意图和目的,你的问题是僵硬的。要确定对步长的要求,请依赖专家编写的众多库之一(MATLAB 套件就是一个例子,还有 SUNDIALS、VODE、DASPK、DASSL、LSODE 等),它们具有自适应时间步进启发式。SUNDIALS 手册解释了他们用来确定包所用时间步长大小的决策规则,并为您提供了在实践中使用的规则示例。

  2. 同样,我会在实践中使用具有自适应时间步进的库,因为这样做更有效。但是,如果您自己编写一个方法,使用固定的步长,如果您注意到大的振荡,或者您的解决方案“爆炸”,那么您会怀疑您的时间步长太大,并减少它。重复,直到你得到一个行为合理的数值解。像 Ascher 和 Petzold 以及 Hairer 和 Wanner 这样的教科书就是这种现象的好例子。