通读 Tim Davis 的稀疏线性系统的直接方法一书,他说 matlab 可以使用超节点 Cholesky 分解,但从不使用多前 Cholesky 分解。至少在使用反斜杠运算符时。相比之下,在许多优化代码中使用的 HSL MA57 是一种稀疏对称的不定求解器,它使用了多前沿方法。
我对超节点和多额方法之间的区别只有一个非常基本的了解。所以我很好奇何时可以应用超节点与多额方法是否有限制?在它们都有效的情况下,它们之间是否有任何权衡可能导致一个比另一个更好?
通读 Tim Davis 的稀疏线性系统的直接方法一书,他说 matlab 可以使用超节点 Cholesky 分解,但从不使用多前 Cholesky 分解。至少在使用反斜杠运算符时。相比之下,在许多优化代码中使用的 HSL MA57 是一种稀疏对称的不定求解器,它使用了多前沿方法。
我对超节点和多额方法之间的区别只有一个非常基本的了解。所以我很好奇何时可以应用超节点与多额方法是否有限制?在它们都有效的情况下,它们之间是否有任何权衡可能导致一个比另一个更好?
supernodal 和 multifrontal 方法都使用相同的想法实现高性能:使用类似 BLAS3 的矩阵内核对密集块执行矩阵运算。有很多报告比较了这些方法在各种矩阵上的具体实现,例如
http://www.numerical.rl.ac.uk/reports/ghsRAL200505.pdf
一般来说,我不知道有任何结果表明一种方法从根本上优于另一种方法。
有些矩阵非常稀疏,以至于超节点和多前沿方法的密集子矩阵方法不会导致最佳性能。参见,例如:
http://dl.acm.org/citation.cfm?id=1824814
正如您所指出的,MA57 是为对称不定矩阵设计的,当并不总是可能的,但一个分解是。MATLAB 将 MA57 用于对称不定矩阵。看,
http://www.mathworks.com/help/matlab/ref/ldl.html
通过设置
spparms('spumoni',1);
在调用反斜杠之前,您可以查看您的特定矩阵正在使用哪些算法。有关更多信息,请参阅: