有效地解决低秩线性参数系统?

计算科学 线性求解器
2021-12-09 18:11:54

我有大量的系统形式:

Ax=bi

解决大量此类问题bi1ik 但是哪里A是固定的(A 是等级p一般——即非稀疏、非 PSD——矩阵)。

我可以使用 LU 分解单独解决它们(成本O(p3)) 但想知道是否有更有效的方法来获取所有k解向量xi比解决这些k系统独立?

的典型值范围p,k我正在考虑在 10-100 之间(通常,我期待kp)。

一个指向所提出的任何方法的 c++ 实现的指针也将不胜感激。

最好的祝福,

3个回答

首先,您需要对第一个方程组使用 LU 分解。这是一Θ(p3)手术。但是由于您没有更改矩阵系数而仅更改 RHS 向量,因此您可以重用因子 L 和 U 来“解决”新系统Θ(p2)操作。

算法:

  1. 求 A 的 LU 分解。
  2. 对于 i = 1 到 N
  3. 解决系统Lyi=bi(前锋换人)
  4. 使用解决方案yi解决系统Uxi=yi
  5. 具有 RHS 向量的系统的解决方案bi那么是xi.
  6. 结束

如果你事先知道所有右手边,你可以将它们组合成一个矩阵并求解AX=B. 可以在代表最先进技术的 LAPACK 库中找到此例程(在 C 和 Fortran 中)。

如果kp计算逆矩阵然后将每个右手边与它相乘可能更有效(比使用 Paul 的标准处理方式)。这更好地向量化(和并行化),并且可以忽略计算逆时的小初始开销。与案例不同kp. 例如,如果k=p那么算术运算的开销是 50%,矢量化的增益可能不足以弥补这一点。

如果k<p那么可能值得使用通过记录 Krylov 子空间方法(例如 GMRES)的迭代而获得的“子空间回收”方法之一。如果kp或者k>p我认为应该很简单地证明这些子空间回收方法不会有效。