将函数插值到网格上会产生不同的结果,具体取决于网格密度

计算科学 插值 加勒金
2021-12-01 05:54:45

我想测试我的程序的数值准确性。为此,我想插入函数

f=I0exp(100x2)exp(100y2)
到一个网格上,定义在
Ω=[0,1]2
通过使用方程
u=f
和连续伽辽金法。
此外,我将结果与预期的(插值)函数进行了比较。边界条件是
nu=0

现在我希望最低值是0(exp(100)exp(100)1.31087),无论网格大小如何,而是我得到(对于I0=1)

+---------------+---------------+
| cell number   |  Lowest value |
+---------------+---------------+
| 16            |  -0.003398    |
| 64            |  -1.434e-5    |
| 256           |  -5.822e-10   |
| 1024          |  -4.559e-32   |
| 4096          |  0            |
+---------------+---------------+

这些值对于较小的值没有问题I0,但只要I0增加我必须使用更精细的网格,否则我的值将变为负值。它也无助于细化原点周围的网格,值在(1,1)仍然是负数,除非我在任何地方都使用临界网格密度。
这些数字错误,还是方法本身造成的错误?有没有办法让网格的密度在低梯度的地方低于临界密度(例如在(1,1)),没有得到“不正确”的结果?

1个回答

您假设一个适用于原始函数的属性f也适用于L2投影uh=Phf. 在您的情况下,该属性是,如果f是非负的,那么uh也应该是非负的。

但这个假设通常是不正确的。您已经从傅立叶或泰勒级数的几个术语中知道了这一点:仅仅因为一个函数是非负的,实际上并不能保证它的(截断的)傅里叶级数或(截断的)泰勒级数是非负的。事实上,如果你想到阶跃(“Heaviside”)函数的傅里叶级数,那么我们知道这会产生吉布斯现象,这意味着截断傅里叶级数的最大值和最小值超过了原始函数的最大值和最小值. L2投影到有限维有限元空间实际上属于同一类型:它有上冲和下冲,这就是您所观察到的。

我要补充一点,如果将函数插值到网格上,插值函数的最小值和最大值不会超过原始函数的极值。这是投影操作不共享的插值操作的属性。