如何在 scipy 的 SuperLU 包装器中重用排列顺序?

计算科学 Python 稀疏矩阵 scipy
2021-12-19 14:20:31

我正在解决scipy 0.18内的稀疏线性方程组,它在内部使用SuperLU(在 umfpack 由于许可证问题而被删除之后)。

当前,我在算法的每次迭代中都进行了完整的重新分解,但现在我想重新使用在第一次迭代中计算的排列排序(至少是列排列;但甚至可能是行排列) . 我如何使用 scipy 以一种很好的方式实现这一目标?

我以前没有 SuperLU 的使用历史(也没有太多使用稀疏代数包的实际经验),但用户指南让我相信,这应该通过options-parameter.

Fact 指定是否在输入时提供矩阵 A 的因式分解形式,如果没有,将如何根据以前的历史记录矩阵 A 的因式分解,例如从头开始分解,重用 Pc 和/或 Pr,或重用L 和 U.fact 的数据结构可以是以下之一:

– DOFACT:矩阵 A 将从头开始分解。

– SamePattern:矩阵 A 将被分解,假设在此之前执行了具有相同稀疏模式的矩阵的分解。因此,这个因式分解将重用列置换向量 perm c。

– SampPattern SameRowPerm:矩阵 A 将被分解,假设在此之前执行了具有相同稀疏模式和相似数值的矩阵的分解。因此,此分解将重用行和列置换向量 perm r 和 perm c,行和列缩放因子 Dr 和 Dc,以及从先前符号分解建立的分布式数据结构

作为替代方案,在 内还有以下内容options

ColPerm 指定如何置换矩阵的列以保持稀疏性。

– 自然:自然排序。

– MMD ATA:AT A 结构的最小度排序。

– MMD AT PLUS A:AT + A 结构的最小度排序。

– COLAMD:近似最小度数列排序

– MY PERMC:使用用户在 perm c 中输入的顺序。

问题

  • 我应该使用 SuperLU 的哪个部分来实现我的目标?以上之一?还有什么?
  • 如何在 scipy 中完成?
    • scipy 的文档ColPerm中缺少-参数(也许它不可用)MY_PERMC
0个回答
没有发现任何回复~