Answers:
要回答您的问题:
据我所知,在实践中,如果显式方法相对于您所关注的时间尺度需要非常小的时间步长(有关ODE变硬的含义,请参见此问题的答案),以便得出准确的结果,则对于所有意图和目的,您的问题就很棘手。要确定对步长的要求,请使用专家编写的众多库之一(MATLAB套件是一个示例,还有SUNDIALS,VODE,DASPK,DASSL,LSODE等),这些库具有自适应的时间步长启发式方法。SUNDIALS手册介绍了决策规则,这些决策规则用于确定打包所需时间的大小,并为您提供实际使用的规则示例。
再一次,我会在实践中使用具有自适应时间步长的库,因为这样做会更有效。但是,如果您自己使用固定步长编码一种方法,或者发现较大的波动,或者解决方案“膨胀”,则可能会怀疑您的时间步长太大并减少了时间步长。重复进行,直到获得行为合理的数值解。诸如Ascher和Petzold以及Hairer和Wanner这样的教科书就很好地说明了这种现象。
观察它的更好方法是,对于一个刚性问题,任何稳定的显式计算所导致的误差都比所需的误差容限小得多。
有许多使用显式方案自动检测刚度的好方法,尤其是嵌入式Runge-Kutta对。参见例如:
在faleichik的第二个示例中,随着步长的减小,当超过稳定的时间步长阈值时,误差会急剧下降到远远低于典型所需公差的水平。因此,一个好的误差估计器确实可以揭示问题的严重性。在第一个问题中,以稳定步长获得的误差将在典型的所需公差范围内,这表明没有刚度。
因此请注意,如果需要足够严格的容错能力,那么任何问题都不会变得僵硬。
那么,问题是否严峻?答案是否定的!为了正确地再现溶液的振荡,这里需要小的步长。
这个问题僵硬吗?是的!我们已经采取了非常小的步骤来重现变化非常缓慢的解决方案。这是不合理的!在此,时间步幅的大小受显式Euler稳定性的限制。
这个问题是
结论:有关时间步长和相应误差的信息不足以检测刚度。您还应该查看获得的解决方案。如果变化缓慢且步长很小,则问题很可能会变得很棘手。如果解决方案振荡很快,并且您相信自己的错误估计技术,那么这个问题就不会很棘手。
如果您使用带有自动步进控制功能的黑盒显式求解器,则无需执行任何操作:该软件将自适应地采用所需的步进大小。
当然,这种分析最适用于已知频谱的线性问题。对于更实际的问题,我们应该依靠刚度检测的数值方法(请参阅其他答案中的参考资料和评论)。