混沌数值模型的回归检验


10

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

这个问题在某种程度上受到David Ketcheson 关于单元测试科学代码问题的启发:我对如何实现此类模型的回归测试特别感兴趣。如果较小的初始条件变化会导致主要的输出变化(这仍然可能是现实的充分表示),那么我们如何才能将这些变化与因修改参数或实施新的数值例程而引起的变化区分开来?

Answers:


7

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


您知道好的示例纸吗?将是对您的答案的一个很好的补充。
naught101

并非浮出水面-我不是湍流建模人员。不过,我将从汤姆·休斯的一些最新论文开始,然后从那里开始。
Wolfgang Bangerth,2012年

我认为这是使用汇总统计信息确定动态系统状态的一个很好的例子:“对嘈杂的非线性生态动态系统进行统计推断”
Jugurtha 2012年

4

如果您的代码可以在基本问题的非混乱状态下运行,尤其是可以使用制造解决方案的非混乱状态,那么即使您对这些情况不感兴趣,也应该编写在这些状态下运行的回归测试。如果这些测试失败,那么您立即知道最新代码更改中出现了问题。然后,您可以继续处理与身体相关的问题。


我不认为可以这样运行整个气候模型,但主要组成部分可以。超级单元测试之类的东西。好主意。
naught101

2
但这就是重点。您的回归测试应该具有良好的代码覆盖率(gcov之类的东西是您的朋友),并且应该快速运行。如果您正在运行整个气候模型作为每日回归测试,那么我怀疑您正在浪费很多时间。
比尔·巴特

我想我的思路更多:首先运行测试,然后存储大量指标(如Wolfgang的回答所述)。然后,您进行更改,然后再次运行测试,并将相同的指标与上次存储的指标进行比较。如果您改进了模型(或模型超级组件),那么从理论上讲,指标应该都会改善,或者至少不会显着恶化(除非您之前过拟合,或有其他主意,但是您可以主观地做出决定) 。我想从这个意义上讲测试更具定性,但它们仍然可能非常有用。
naught101

正如这个答案中所讨论的,我想。
naught101

2

首先,我将重点放在您的最后一句话上,因为您触及了问题中的一些不同内容,但我觉得它足以捕获您的要求。如果要更改数字例程,则在从旧版本中验证新例程之前,不应更改初始条件或系统参数。从最弱的角度来看,我认为这是在解决方案上比较一些时间平均值,并且它们是一致的(即使瞬态行为在混乱中彼此分离)。在最强的层次上,您希望这两个例程能够重现完整的瞬态行为。您想要哪个,哪个可以接受,取决于您要问的问题以及从解决方案中得出的结论。

至于说模型是否“应有的表现”,那就是一个完全不同的问题。这与您选择的数字例程无关。从简化的假设到参数的测量/计算,如何构建模型,都应将所有决策都基于问题的物理原理,并希望在类似情况下能进行事先的工作。您也许可以通过在实验室环境中复制的简单案例来验证模型,但是有时甚至不平凡。如果您无法将重要的系统参数确定在一个数量级内,那么您将无法期望任何人相信您在瞬态局部行为中所计算的小细节。

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.