在块 LU 中选择枢轴块的常用方法是什么(对于非 SPD/非对角占优矩阵)?
在块 LU 中旋转
我认为查找此信息的最佳位置是 LAPACK 工作说明或有关 MAGMA LU 分解的演示文稿。具体参见 LAWN280 和 LAWN282(链接如下)。
http://www.netlib.org/lapack/lawnspdf/lawn280.pdf
http://www.netlib.org/lapack/lawnspdf/lawn282.pdf
IMO有一些有趣的策略:
在整个面板上使用通常的部分旋转,并且仅在尾随子矩阵更新时使用块/平铺更新。虽然这个算法的并行度是有限的(面板仍然是一个未解决的瓶颈),但它的优点是它与顺序部分旋转基本相同(在准确性和界面上,一直到 ABI 级别)。
仅在对角线块上的部分枢轴。为非对角占优矩阵交叉手指,但您始终可以在分解之前静态置换矩阵,即将大的非对角条目移动到对角块内,希望它们保持大并适合用作枢轴运行。您还可以将其与阈值/扰动结合起来(用其他东西替换接近零的枢轴)。由于分解输入的低秩扰动会产生所需分解的低秩扰动,因此您可能稍后可以通过使用某种迭代(向后细化或预处理 krylov 解)来恢复。这是稀疏求解器的常用策略,因为由于符号分析的填充和刚性,它们的旋转选择有限。
对输入矩阵应用一些随机(但快速应用/快速反转)变换,以使其更容易在有限/无旋转的情况下进行分解。这有点启发式,但基于实际观察,很少找到一个随机矩阵,其中瓷砖旋转(甚至非旋转)高斯消除失败。因此,将您的(坏)矩阵随机转换为另一个(希望更好)的矩阵,将其分解,然后在求解时应用逆变换。
混合 tile-LU 和 panel-QR 算法(它们都从左到右工作),仅当您检测到 tile-LU 分解中的故障时才使用后者。QR 步骤更慢但更稳定。不幸的是,面板的高/瘦 QR 并行实现更加复杂,因此要使该算法脱离实际需要相当多的跑腿工作。