解决稀疏复杂对称(非厄米特)系统的方法是什么?

计算科学 线性求解器 稀疏矩阵 宠物
2021-12-26 20:52:04

我有一个复杂且对称的稀疏系统(大约 78% 的零条目)(但不是 Hermitian)。下图显示了问题的结构。非对角块是关联矩阵,对角块是密集复矩阵,其元素的绝对值范围为1×10141×103.

矩阵结构

我使用 PETSc 构建了一个代码(确保配置--with-scalar-type=complex),它编译并运行,但求解器要么发散,要么如果收敛,会给出无意义的结果。

使用密集例程(LAPACK,无 PETSc)的代码版本给出了预期的结果。PETSc 生成的矩阵结构(见上图)与预期一致。除了单个条目(第一个条目)之外,右侧为零。我见过的该系统最差的条件数是1×107; 但它,通常,1×104.

为了解决特定类型的问题(稀疏复杂对称,而不是 Hermitian),推荐使用什么方法(求解器)?我可以将它与 PETSc 一起使用吗?

这个答案提到

对于复杂的问题,与直接方法相比,迭代方法的鲁棒性要差得多。

这是为什么?

可能相关的附加信息

不使用预处理。此外,当我配置 PETSc 时--with-scalar-type=real,当系统的虚部与实部相比较小时,系统使用最小残差法 (MINRES) 给出了一些正确的结果。

1个回答

此类问题可以使用LDLT分解(在内存和时间成本上与 Cholesky 相似)。您的矩阵不是很稀疏,因此这样处理它的好处可能有限。我建议将稀疏直接求解器(例如 MUMPS 和 Umfpack)与您使用的密集分解进行比较。复对称矩阵通常难以进行预处理;我建议检查文献以了解您的问题类别。可以使用非对称 Krylov 方法(如 GMRES),也可以使用一些带有适当预处理器的对称方法(例如, KSPCGSetTypeMINRES 变体)。