具有零空间的矩阵的线性代数/数值解

计算科学 线性代数 数值分析 矩阵 多重网格 流体动力学
2021-12-11 03:50:37

我有一个关于线性代数的问题。

我们有一个流体求解器,可以求解压力的泊松方程。当域的某些区域完全被 Neumann 条件包围时,矩阵有一个零空间,我们必须对此进行纠正。我们保留封闭区域的掩码,并在每次迭代中计算平均值并将其减去。

我们注意到,在这种情况下,我们可以从矩阵本身而不是从域中推断出掩码。这样,我们就有了一种修改后的数值方法,它只对矩阵起作用A和 RHSb, 但仍然收敛于A有一个空空间(与第一段相反,其中方法的输入是A,b 封闭区域掩码)。

我想知道这是否更概括了一点,或者是否有人考虑过这一点。例如,即使输入矩阵有一个零空间,并且只有输入是Ab? 我们感兴趣的解决方案是每个 Neumann 封闭区域具有最小平均值的解决方案。

我很感兴趣,因为我们的域并不总是那么简单;有时我们没有诺伊曼条件,但有其他关于压力的条件仍然离开A使用零空间,从软件的角度来看,计算零空间校正似乎更稳健A本身。

(通常,提到 Jacobi 的堆栈溢出问题的答案是你为什么使用 Jacobi??!仅供参考,我们的完整求解器是多重网格预条件共轭梯度,我们使用 Jacobi 和 Gauss-Seidel 作为多重网格的平滑器(A. McAdams , E. Sifakis, J. Teran, 2010)。)

谢谢!

1个回答

这是一个很常见的问题。您正在做的事情有两种更简单的方法:

  • 通过将其固定为零,在一个压力节点上强制执行 Dirichlet 类条件。这样,您的矩阵不再有零空间。压力的平均值可能不为零,但您可以在得到线性系统的解后通过减去平均值来修复一次(而不是每次迭代一次)。

  • 如果初始残差在该零空间中没有分量,则许多迭代 Krylov 空间求解器即使在零空间中也会收敛——换句话说,如果初始残差的压力分量的平均值为零。然后,您在迭代期间根本不需要做任何事情。求解过程在这个零空间内不会稳定,但由于您不关心它,如果您累积一个小的非零平均值,您总是可以在最后减去它。困难在于,虽然求解器将忽略零空间,但您需要有一个预处理器,当给定一个平均值为零压力的向量时,会产生一个平均值为零压力的向量。