迭代求解器是否需要反转前置条件矩阵?

计算科学 迭代法 预处理
2021-12-10 17:25:39

我正在阅读这些关于预处理器的幻灯片。我相信我掌握了它们如何工作的想法,但有些东西仍然没有意义。

如果我们有系统Ax=b并使用预处理器,我们最终得到一个系统M1Ax=M1b.

现在说我决定使用分解,这意味着我需要计算并将其用作预处理器,我需要将其反转。LUM=LU

这是我有点想念的地方,这是否意味着我们实际上正在计算的逆?我猜想有一些下/上矩阵的属性可以使逆很容易,但我似乎找不到它。如果我们实际上是在计算逆矩阵并且没有下/上矩阵的属性使任务变得容易,为什么我们要费心计算预条件子的逆而不是计算的逆(或近似逆) ?MA

2个回答

根据您的评论,您的主要困难似乎是如何对给定矩阵进行 LU 分解M可以很容易地找到一个向量y这样My=b对于给定的b. 希望你感到舒服,如果我们有一个简单的方法来做到这一点,那么这个问题就解决了,因为我们可以处理M1作为一个黑匣子,我们得到一个输入,该方法返回一个输出。

让我们假设我们(不知何故)知道如何找到一个z这样Lz=b对于给定的b. 然后提供我们可以找到一个y这使Uy=z, 然后

LUy=Lz=b,
我们完成了。但是怎么找y? 自从U是上三角,然后将事物写成联立方程,最后一个方程就是
Un,nyn=zn
这很容易一次性解决,因为yn=znUn,n. 但是现在从上一个倒数的等式可以写成
Un1,n1yn1=Un1,nyn+zn1,
鉴于我们刚刚发现,这又是一个需要解决的问题yn(如果您想查找,此方法称为向后替换)。因为获得第 i 个组件意味着做ni乘法和除法,有n线,我们正在做n2运算,这比一般的矩阵求逆要好。更好的是,如果U实际上比一般的上三角矩阵具有更少的条目,那么我们要做的数学运算就更少了。

所以现在我们需要回到寻找z. 但是第一个方程Lz=b只是

L1,1z1=b1,
所以我们可以玩我们之前玩过的完全一样的游戏,除了使用前锋换人。

好的 - 所以你的原始方程是

Ax=b

假设您已经为提出了一个很好的预处理器,称之为预先计算了一个 LU 分解,即AMM

M=LmUm

我使用下标表示这是我们在这里讨论的分解)。然后,假设左预处理,您将求解预处理线性系统mMA

M1Ax=M1b,

或者,等效地

(LmUm)1Ax=(LmUm)1b,

要么

Um1Lm1Ax=Um1Lm1b.

因此,预条件系统矩阵现在是条件好得多Um1Lm1AA

现在你可以

(a)(作为纯粹的学术练习)用非预处理的 Krylov 方法(比如 GMRES)求解系统。由于系统矩阵条件良好,您可以期待快速收敛。

Krylov 算法需要将此矩阵乘以任意(已知)向量,称为换句话说,Krylov 过程需要你的是一个例程,给定,计算rr

z=Um1Lm1Ar

这相当于求解线性系统(对于)。这个系统很容易(=便宜)求解,因为矩阵是三角形的。LmUmz=ArzLmUm

要么

(b)(你在实践中会做什么)在预处理系统上运行预处理 CG。CG 将逆预处理器应用于残差向量同样,这只是意味着它解决了线性系统(对于)。r:=bAxLmUmz=rz

所以,总而言之:永远不要显式地反转矩阵(无论如何你不能在实践中对大矩阵这样做),而是求解相应的线性系统(这在数学上相当于将逆矩阵运算符应用于已知向量)。