边界条件对 fdm 方案收敛性的影响

计算科学 pde 抛物线pde
2021-11-26 04:25:49

我知道边界条件通常是一个棘手的问题。但是,我正在测试形式方程的有限差分方案

ut=a(x)uxx
我知道解析解。因此,如果我指定 Dirichlet 边界条件,我可以看到具有所需速率的完美收敛,但是如果我指定导数的值,我会看到边界处数值解的精度下降(在网格的中间)。两者都来自解析解,但看起来导数不是一个好的选择。我认为应该只有一个解决方案满足初始条件和这样的“斜率”值,还是我错了?我的代码中可能有一个错误,但无法发现它,所以我想知道在边界上施加偏导数而不是函数的值是否会破坏唯一性,这就是为什么我会收敛到一个稍微不同的解决方案?

1个回答

正如 Hui 上面指出的,要正确应用 Neumann 边界条件,您应该利用鬼点并扩展您的nth将离散化模具订购到您的域边界。在边界使用前向/后向差异或外推会降低您的解决方案。

假设一个2nd阶中心差分格式 Neuman 边界条件,ux(t,x=0)=p0(t),变成(省略(t)为方便起见):

ux|0=p0u1u12h

u1=u12hp0

现在,代替u1进入边界处的离散方程,以获得 Dirichelt BCu0

u0(t)=a(0)u12u0+u1h2

u0=a(0)2u12hp0h2+2a(0)

以这种方式应用 Neumann 边界条件是一致的,并且严格等价于在极限中应用解析 Dirichelt bch0.

至于哪个更准确,对于有限h,如果您在边界处应用 Dirchlet 条件,则您在边界处的解析解和数值解之间施加了精确一致,但您对此时解导数的估计将包含2nd订单错误。应用 Neumann 边界条件只是做相反的事情,即在边界处产生解的导数的解析值和数值之间的精确一致性(使用您的有限差分模板估计),而估计u此时将包含一个2nd订单错误。在极限h0两种方法都应该收敛到相同的唯一解。

如果您没有使用鬼点,那么您就没有以一致的方式应用 Neumann 条件,并且您的结果确实会比使用 Dirichelt 边界条件求解时更不准确。