有没有一种简单的方法可以将稀疏矩阵添加到密集矩阵的 LU 分解中?

计算科学 拉帕克 矩阵分解 抛物线pde
2021-12-14 11:03:28

我正在求解以下形式的抛物线方程:

(Mτj+A)uj+1=Mfj+ujτj,

其中是密集刚度矩阵,是本文分数扩散问题的右侧:Af

[Acosta、Gabriel & Bersetche、Francisco & Borthagaray、Juan。(2017)。分数拉普拉斯算子的二维齐次狄利克雷问题的简短有限元实现。计算机和数学与应用程序。784-816。10.1016/j.camwa.2017.05.026。]

M是质量矩阵,是前一时间步的解,是未知数向量。是一个数字。ujuj+1τj

我之前通过lapack的函数用LU分解解决了非抛物线问题Au=Bdgesv

M是一个稀疏矩阵,每行大约有 5 个元素。通过将所有系数与对角元素相加,也可以将其简化为对角矩阵(质量集总)。

所以我的问题是:是否可以计算一次,然后每一步只分解A=LULUMσj

我有一个模糊的记忆,几个月前我在网上找到了一个讲义或教科书。唉,我的 google-fu 现在让我失望了。我尝试在谷歌上搜索“LU 的抛物线方程解”和一些关于抛物线方程的其他变体。

2个回答

问了几分钟后,我找到了答案。上述过程称为“更新 LU”。这个问题有一个很好的通用答案,带有指向其他更具体问题的链接。

Cholesky 分解的全等级更新

因此,就我而言,简短的回答是否定的。您不能在小于O(n3)的满秩矩阵更新 LU 分解,这与更新为满秩时再次执行分解相同。我相信,质量矩阵是满秩的。

编辑:另一个选择是通过用其他东西替换 LU 分解来解决这个问题。例如:

  1. 可以按照 Thijs Steel 在另一个答案中的建议使用 Hessenberg 上三角缩减
  2. 使用分层方法来压缩矩阵A然后在分解之前对压缩矩阵进行更新。前提是A适合压缩。为此,我确实使用了来自 STRUMPACK 的 Hierarchical Semo-separable 压缩,但这个问题是看是否有办法“优化”直接高斯求解器。
  3. 或者我不知道的其他选项。

您可以考虑另一种分解:Hessenberg 上三角归约。它通常用作 QZ 算法中的预处理步骤,但它也有其他用途。

考虑减少然后,这相对便宜,因为它只涉及正交矩阵和 Hessenberg 矩阵。的任何值都有效,只要矩阵不变。(A,M)=QT(H,T)ZMμj+A=QT(Tμj+H)ZμjAM

然而,Hessenberg 上三角归约是相当昂贵的。只有当你有很多系统要解决时,这才是值得的。