如何测量微分方程求解器的效率

计算科学 pde 基准测试
2021-12-15 21:53:06

我想比较一些偏微分方程的求解器。我需要包括计算时间和解决方案的准确性(与分析解决方案或类似的东西相比)。

我可以使用什么样的措施?

2个回答

有许多不同的方法可以做到这一点。其中一个标准是工作精度图,您可以在其中绘制时间量或函数调用量,以达到一定的精度水平。您可以在DiffEqBenchmarks.jl找到大量示例。通常,您沿着窗口滑动时间步长或自适应容差并绘制所有(时间,误差)坐标。然后是问题“要得到 X 位数的错误,什么方法在这个问题上表现最好?” 通过查看情节得到了很好的回答。

你必须为你的错误选择一个衡量标准。这是一个很好的例子,它在一个小问题上贯穿了很多一种常见的方法是计算一个参考解决方案进行比较(这里我使用常见的求解器radau,比如非常低的容差,比测试中使用的容差更低。您可以使用多个参考来确保它对于测试足够收敛)。然后你对参考使用一些误差测量。最终时间点的 l2 错误很容易做到。整个时间序列的 l2 误差是平均误差的一个很好的度量(可能是按步数平均)。如果您有密集输出,使用密集输出的 L2 错误也是一个很好的测试。

虽然工作精度图非常标准,但可能有理由针对您的应用程序做一些更具体的事情。例如,您可能想要对系统的某些基本属性(如能量守恒)的发散进行计时和估计在某些情况下,构建完整的工作精度图是遥不可及的(获取参考解决方案可能需要一个集群,特别是如果您想为大型 PDE 保留整个时间序列!)。因此,您可能只想进行更有针对性的分析好消息是,如果您只是对确定性(非随机)方程进行基准测试,那么很容易投入时间并获得一个参考解决方案(随机更难进行基准测试!)。

希望这能提供一些想法。

那么你应该比较的两个主要措施显然是计算时间和准确性 - 不要过度思考。

您还可以比较收敛性/准确性作为时间步长的函数。如果您要测试自适应方法,您也应该将时间步长分析为时间的函数。

根据您感兴趣的问题类型,您可以比较某些系统属性上的错误传播。此外,验证这些方法是否保守也很有趣,对于某些物理系统来说,这是非常相关的。