我可以使用显式的时间步进方案来数字确定ODE是否僵硬吗?


10

我有一个ODE:

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

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

  1. 通常,当错误项的解析表达式不可用或不可推导时,这将如何确定刚性ODE?

  2. 通常,当ODE僵硬时,如何确定“足够小的”时间步长?


有使用显式方法检测刚度的标准方法。我在这里放置此评论,因为可能很难在下面找到我更详细的答案。
David Ketcheson

Answers:


6

要回答您的问题:

  1. 据我所知,在实践中,如果显式方法相对于您所关注的时间尺度需要非常小的时间步长(有关ODE变硬的含义,请参见此问题的答案),以便得出准确的结果,则对于所有意图和目的,您的问题就很棘手。要确定对步长的要求,请使用专家编写的众多库之一(MATLAB套件是一个示例,还有SUNDIALS,VODE,DASPK,DASSL,LSODE等),这些库具有自适应的时间步长启发式方法。SUNDIALS手册介绍了决策规则,这些决策规则用于确定打包所需时间的大小,并为您提供实际使用的规则示例。

  2. 再一次,我会在实践中使用具有自适应时间步长的库,因为这样做会更有效。但是,如果您自己使用固定步长编码一种方法,或者发现较大的波动,或者解决方案“膨胀”,则可能会怀疑您的时间步长太大并减少了时间步长。重复进行,直到获得行为合理的数值解。诸如Ascher和Petzold以及Hairer和Wanner这样的教科书就很好地说明了这种现象。


9

观察它的更好方法是,对于一个刚性问题,任何稳定的显式计算所导致的误差都比所需的误差容限小得多

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

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

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


2
这些是我在看到您的答案之前将要链接的论文。+1,当然。:)我还要添加这个这个,最后一个。这绝对是一个经过充分研究的问题...
JM 2012年

9

1.是否可以仅通过使用显式方法以数值方式检测刚度?

  • [0,10]τ=1 τ

    在此处输入图片说明

    τ=0.1在此处输入图片说明

    τ=0.1[0,10]

    那么,问题是否严峻?答案是否定的为了正确地再现溶液的振荡,这里需要小的步长

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

  • τ=1

    在此处输入图片说明

    τ=0.1

    在此处输入图片说明

    τ=0.1[0,10]

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

    这个问题是

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


结论:有关时间步长和相应误差的信息不足以检测刚度。您还应该查看获得的解决方案。如果变化缓慢且步长很小,则问题很可能会变得很棘手。如果解决方案振荡很快,并且您相信自己的错误估计技术,那么这个问题就不会很棘手。


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

如果您使用带有自动步进控制功能的黑盒显式求解器,则无需执行任何操作:该软件将自适应地采用所需的步进大小。

[Λ,0]Λ=1000

[2,0]τΛτ

τ2|Λ|.

τ1|Λ|,
1/|Λ|<τ2/|Λ|

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


正如David所链接的一些论文中所提到的那样,寻找主导特征值(适当修改)的幂方法是基于Jacobian的刚度检测器的常用选择。
2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.