如何为一般情况下的二维隐式有限差分填充矩阵条目

计算科学 有限差分 稀疏矩阵 隐式方法
2021-12-17 10:35:07

如果我为 2D 问题导出了一个有限差分公式,例如:

afi,j+bfi1,j+cfi,j1+dfi1,j1=gi,j

其中 f 是网格上的未知函数,其他一切都是已知的,在一般情况下如何填充有限差分矩阵中的条目?Ai,ji,j

我可以根据上面的“if then...”形式构建一些规则吗?i>j1

在每本关于该主题的书中,他们都只是简单地展示了矩阵并证明它是有效的。但我对一般情况感兴趣,因为我想推导出一些复杂的有限差分公式(比二维扩散复杂得多)。使用与我上面使用的不同的符号可能会更好。

1个回答

这实际上取决于如何使用矩阵。在隐式方案中,您通常求解形式为的系统,其中是与时间步长相关的一些小数。对于任何比一维和小二维问题大得多的问题,您必须非常努力地考虑如何实际存储矩阵并解决问题。两种流行的方法是(IγA)x=bγ

  1. 稀疏直接方法:MATLAB 特别擅长这些,如果您的矩阵存储为稀疏数组,则反斜杠命令将默认使用这些方法。这需要实际构建矩阵,尽管您只需指定矩阵的非零值以节省空间。在多个维度中,可能最简单的方法是使用 Kronecker 产品将多个 1-D 模板张紧在一起。例如,如果是一维有限差分拉普拉斯算子,而是二维有限差分拉普拉斯算子,则关系式 D1D2

    D2=D1I+ID1.
    这可以用来大大简化构建这些矩阵的过程。然后,还可以在微分算子张量后添加边界条件等内容。

  2. Krylov 迭代方法:使用 Kyrlov 方法,您无需使用矩阵本身即可计算系统的解,即仅使用矩阵向量积由于这些矩阵非常稀疏,因此矩阵向量乘积相对便宜,而且作为奖励,如果您不想这样做,则无需担心实际形成矩阵。例如,您可以编写一个函数,接收一个未知向量,将其形成一个二维数组(在 2 个空间维度中),然后遍历每个索引并应用有限差分公式并将结果重新整形为向量,这对于 Krylov 方法来说非常好。一些流行的 Krylov 方法是用于一般问题的 GMRES 和用于 spd 问题的共轭梯度(IγA)vv