调试 CG 方法中使用的牛顿方法

计算科学 牛顿法 雅可比
2021-12-12 11:01:22

我目前正在对我的程序进行校对,该程序旨在使用牛顿法求解非线性方程,使用连续伽辽金方法。因此,作为第一步,我使用与时间无关的方程( - 泊松方程的有限元方法的收敛率,取决于元素阶数)对其进行了检查,得到了肯定的结果。作为下一步,我打算 在域 和 }\partial\Omega 上的边界条件 作为时间离散化我使用 这应该给我 H1

tu=2uu0=sin(πx)sin(πy)
Ω=[0,1]×[0,1]
u=0 on Ω
unewuolddt=2unew
u(x,y,t)=exp(2π2t)sin(πx)sin(πy)
那么雅可比是 或弱形式(同时考虑边界条件) 最优步长应该为1,问题为线性的。 然后我将每个时间步的结果与预期结果进行比较,一方面通过计算 -seminorm,另一方面计算解决方案中的最高值(应该相当于 )。不过,我的结果并不像预期的那样:
F(u)(δu)=tδu2δu
=tδuφ+uφ

H1exp(2π2t)

+-------+-------------------+-----------------+
| time  | Calculated result | Expected result |
+-------+-------------------+-----------------+
|     0 | 0.336254          | 1               |
|   0.1 | 0.113069          | 0.138911        |
|   0.2 | 0.0380201         | 0.0192963       |
|   0.3 | 0.0127845         | 0.00268047      |
|   0.4 | 0.00429886        | 0.000372347     |
|   0.5 | 0.00144552        | 5.17232e-05     |
|   0.6 | 0.000486064       | 7.18493e-06     |
|   0.7 | 0.000163442       | 9.98066e-07     |
|   0.8 | 5.49583e-05       | 1.38643e-07     |
|   0.9 | 1.84801e-05       | 1.9259e-08      |
|     1 | 6.21403e-06       | 2.67529e-09     |
+-------+-------------------+-----------------+

我知道该程序适用于但目前我不知道如何检查为什么我的计算结果与我预期的不同。我检查了雅可比行列式(假设我上面计算的方程是正确的),所以我假设错误在其他地方。

tu=f

1个回答

您正在使用向后欧拉有限差分时间步进方法。这是稳定的,但只有一阶准确,所以我怀疑解释了减少因子的差异。更明确地说,假设一个完美的空间表示并将您的初始条件代入您的差分方程,得到 对于 0.1 的时间步长,这使得每一步都是最后一步的 0.3363,这正是您所看到的。

(1+2π2Δt)un+1=un.

唯一悬而未决的问题是为什么您的指标在初始条件下给出 0.336254 而不是 1.0。根据与上面计算的数字的接近程度,我怀疑这实际上是您的第一步的值,而不是第零步。

如果您想要更接近的结果,您可以尝试使用二阶(或更高)时间步进方法,例如中点方法(可能需要或可能不需要对您的代码进行手术)。请注意,作为交换,您将牺牲简单性、稳定性或两者兼而有之。