Cholesky 分解的全等级更新

计算科学 线性代数 线性求解器 迭代法 带状矩阵 密集矩阵
2021-12-05 07:21:05

A是一个实数、对称、正定矩阵。它至少有 500 行,可能更多。我计算它的 Cholesky 分解,它允许我计算

  • det(A)
  • A1X对于一些向量/矩阵X
  • A1(我知道这里的警告)

不幸的是,这个操作需要在矩阵上执行很多次(比如一百万次),这些矩阵密切相关但不同于A. 正式地,A和任何其他类似的矩阵A由全等级更新不同E这样

A=A+EEA1rank(E)=dim(E)

现在,我在每一步计算每个矩阵的 Cholesky 分解。为了加快计算速度,我想使用两个连续矩阵密切相关的信息。我怎样才能做到这一点?

我正在寻找O(N2)而不是Cholesky 分解的O(N3)目前矩阵很密集,但我也对带状稀疏矩阵的解决方案感兴趣。

编辑由于这个问题是一般性的并且给出了一个很好的一般性答案,我会将其标记为已接受。但是,就我更具体的问题而言,请参阅多元正态分布的 Cholesky 分解的全等级更新

1个回答

一般来说,除了完全重构矩阵之外,没有捷径可走。在这个 SE 上有一些类似的问题,比我更深入地涵盖了这个主题:

预计算后,对角线加固定对称线性系统可以在二次时间内求解吗?

PSD矩阵+对角矩阵的LU Decom

矩阵求逆的 Cholesky 分解扰动

对称正定矩阵的对角线更新

UDU Modified Cholesky Rank 1 更新的计算复杂度和实现

长话短说,你可以在中做到这一点。如果是 rank-1 或某个等级渐近低于您要更新的矩阵的维度,那么您可以做得比更好,否则您就不走运了。O(rank(E)n2)En3

对于带状矩阵,情况要好一些。您可以在中进行 Cholesky 分解,因此如果带宽明显小于,则进行单次分解的成本不会那么高。O(bandwidth2n)n

你的实现是串行的还是并行的?如果它是串行的,您可能希望使用像Elemental这样的包来并行化每个单独矩阵的分解。有时,矩阵太小而无法从并行性中获得太多优势,但如果你有 1000 维密集矩阵,我怀疑情况并非如此。

你说过矩阵是相关的;你是在程序开始时给了一大堆矩阵,还是按顺序更新它们?如果是前者,您可以使用 MPI 让多个处理器并行处理矩阵。{Ai}