有效评估乙问− 1乙吨BQ−1BT(域分解实现)

计算科学 域分解
2021-12-21 03:39:33

我已经实现了一个 schur 补域分解方法来解决 Matlab 中的大规模问题。它运作良好,但我认为应该有一些替代方法来更有效地实现算法的某些部分,以规避高内存使用。具体来说,我需要评估M=BQ1BT在哪里Q是一个p×p实值、对称、稀疏和正定矩阵和B是一个q×p极其稀疏的矩阵只包含{1,+1}非零条目(q通常远大于p)。我的方法是M=B(QBT); 然而,对于不是很大的值,它的评估变得非常耗费内存和时间p. 任何解决此问题的建议都受到热烈欢迎。

1个回答

这总是会有点昂贵的计算,因为任何“有趣的”稀疏矩阵的逆通常都是密集的,因此也是M. 也就是说,有比你提到的明显的更聪明的技术,它们渐近不比分解Q本身,只要B行数不超过的根分隔符Q. 这很可能是这种情况,因为在大多数 DDM 中,矩阵Q来自单个域(体积)上的基础 PDE 的体积离散化和算子M表示域边界上的 Dirichlet-to-Neumann 映射或 Robin-to-Robin 映射,使得M具有“表面基数”,就像的根分隔符Q.

我编写了一个 GPL 许可的稀疏直接包,称为 Myramath 来执行此计算(请参阅http://www.myracore.com,它也在我的个人资料中)。除了通常的factor()/solve()API 之外,求解器还拥有一个.schur()可以形成矩阵的方法,例如M. 我还推荐另一种称为 的算法.partialsolve(),它也有用于子结构/DDM 的有趣应用。详见教程材料,从这里开始。schur()partialsolve()方法在这里解决