自收敛测试可靠吗?

计算科学 数值分析 收敛
2021-12-16 16:05:07

我正在开发一个求解器,用于求解关于时间和空间导数的一阶线性双曲方程。求解器的形式精度必须为 5,因为我使用 5 阶精确 Runge--Kutta 方法和 5 阶有限差分 WENO 用于 Hamilton--Jacobi 方程。

为了验证我的求解器,我进行了收敛性研究。我必须解决:在一种情况下,我有一个指数增长的解决方案,而在另一种情况下,我有一个指数衰减的解决方案。我不知道一个精确的解决方案,所以我使用最精细网格上的解决方案作为精确的解决方案来测量离散化误差。

测量误差后大号2-norm,对于指数增长的解决方案,我得到以下结果:

Resolution  L2-error  L2-order
  199       3.36e-05  nan
  399       7.65e-07  5.45
  799       2.36e-08  5.01
 1599       5.05e-09  2.22
 3199       3.01e-09  0.74
 6399       2.15e-09  0.48
51199       nan       nan

我在“分辨率”列中有“奇怪”的数字,因为空间步长计算为

ΔX=1ñ+1,
在哪里ñ是“分辨率”列中的分辨率。通过这种方式,我可以确定,例如,最粗网格上的解决方案中的每个网格点都与最精细网格上的解决方案中的每个第 256 个网格点相匹配(52000 / 200 = 256)。然后测量网格函数的离散化误差为

e=(1ñ+1一世(199)-256一世(51999))

上表中的数据表明,最初我的准确度为 5 阶,尽管我没有得到值 5.00 的渐近收敛。然后,解决方案的顺序显着下降,我可以用浮点错误来解释。

然而,真正的问题是,当我对指数衰减解的情况进行收敛性研究时,我根本没有得到 5 阶精度:

Resolution  L2-error  L2-order
199         1.73E-08  nan
399         1.14E-11  10.56
799         4.92E-12   1.22
1599        2.18E-12   1.17
3199        1.00E-12   1.12
6399        5.46E-13   0.87
51199       nan       nan

最初,我得到了荒谬的 10 阶准确度,它立即降级为 1 阶。我应该注意到,在这种情况下,解决方案在 1e-5 到 1e-12 的范围内变化(它会衰减)。解的小幅度是否可以成为这种精确度阶的奇怪行为的原因?

所以,我有以下问题:

  1. 自收敛测试可靠吗?我是否通过逐点减去两个解来正确测量离散化误差?

  2. 对于具有两个不同问题的同一个求解器,收敛行为截然不同的原因是什么?

1个回答

出于所有实际目的,由于累积舍入,1e-9 的 L2 误差为零。因此,对于您的第一个示例,分辨率超过 1600 的所有内容都是准确的。对于您的第二个示例,分辨率高于 400 的所有内容都是精确的。在这些点上,您不能再期望通过使用更多点来显着提高准确性,并且您计算的收敛“率”毫无意义。

为了更好地测试您的代码,您需要找出粗网格上的误差较大的问题。(您应该确保它是相对误差,而不是绝对误差,因此仅将右侧、初始值和边界值乘以 1e6 不算数。)