混沌数值模型的回归检验

计算科学 测试 数字
2021-12-02 03:46:09

当我们有一个代表真实物理系统并且表现出混乱的数值模型(例如流体动力学模型、气候模型)时,我们如何知道该模型正在按应有的方式运行?我们不能直接比较两组模型输出,因为即使初始条件的微小变化也会极大地改变单个模拟的输出。我们无法将模型输出直接与观察结果进行比较,因为我们永远无法足够详细地了解观察结果的初始条件,而数值近似无论如何都会导致微小的差异,并会在系统中传播。

这个问题的部分灵感来自 David Ketcheson关于单元测试科学代码的问题:我对如何实现此类模型的回归测试特别感兴趣。如果初始条件的微小变化会导致输出的重大变化(这可能仍然是对现实的充分表示),那么我们如何将这些变化与修改参数或实施新的数值程序引起的变化区分开来?

3个回答

在这种情况下,您可以比较的只是解决方案的统计数据:平均值、更高的矩、跨边界的热通量和其他整数。看看讨论 Navier-Stokes 方程的湍流模型的众多论文中的一篇,例如:它们充满了功率谱图、焓、熵、熵和其他你以前从未听说过的词. 所有都是流量的某个整数,它们与从其他模拟和/或实验计算的相同整数进行比较。

如果您的代码可以在潜在问题的非混沌状态下运行,尤其是您可以使用制造解决方案的方法的非混沌状态下,您应该编写在这些状态下运行的回归测试,即使它们对您来说并不感兴趣. 如果这些测试失败,那么您会立即知道最近的代码更改出现了问题。然后你可以继续解决更多与物理相关的问题。

首先,我将专注于你的最后一句话,因为你谈到了你问题中的一些不同的东西,但我觉得它充分抓住了你的问题。如果您要更改数值例程,则不应更改初始条件或系统参数,直到您从旧例程中验证了新例程。在最弱的层面上,我认为这是比较您的解决方案的一些时间平均值,并且它们是一致的(即使在混乱中瞬态行为彼此分歧)。在最强的级别上,您会期望这两个例程重现完整的瞬态行为。您想要哪些,哪些可以接受取决于您提出的问题以及您从解决方案中得出的结论。

至于说一个模型是否“表现得应该”,这是一个完全不同的问题。这与您选择的数值例程无关。如何构建模型,从简化假设到参数的测量/计算,您的所有决定都应该基于问题的物理特性,并希望之前的工作是在类似情况下完成的。您可能能够通过在实验室环境中复制的简单案例来验证模型,但有时即使这样也不是微不足道的。如果您无法将重要的系统参数确定在一个数量级之内,则不能指望任何人相信您在瞬态局部行为中计算的小细节。