也就是说,当我为一个非常大,对称且稀疏的A做A\b
时,matlab使用什么算法?
答案 0 :(得分:4)
如果矩阵是稀疏且对称正定,但具有非常窄带,则使用专门的带解算器。大多数矩阵没有足够窄的频带来触发这种情况。通常,这会在样条工具箱中显示一维样条曲线。二维问题有一个很大的“带”(它们不是真正的带状矩阵)。
更典型地,MATLAB将CHOLMOD用于稀疏对称正定矩阵。如果矩阵是稀疏的,对称的和不确定的,那么它使用Iain Duff的MA49。
您可以使用此选项让MATLAB告诉您A\b
内部正在执行的操作:
spparms ('spumoni',3)
然后再次使用
将其关闭spparms ('spumoni',0)
对于稀疏方阵,它使用UMFPACK。对于稀疏矩形矩阵,它使用SuiteSparseQR(或简称spqr)。
对于较低或较高三角形的稀疏矩阵,或者可以置换为这样的稀疏矩阵,它使用利用这些属性的前向/后向求解器。
MATLAB根本不使用反斜杠中的单纯形法。如果矩阵是矩形的(短而胖,列数多于行数),A\b
将返回一个基本解。如果您想要最小的2-norm解决方案,则需要对A'
进行因式分解。这可以在spqr MATLAB接口中完成,但该选项在MATLAB发行版中不可用。您需要从suitesparse.com的源代码安装spqr。
答案 1 :(得分:2)
答案取决于A的一些属性(对角线/方形/带状?等)。 CHOLMOD,UMFPACK和qr分解是一些选择。
文档解释了它。 以下是文档在线快照的链接。这可能已经过时了。 - http://amath.colorado.edu/computing/Matlab/OldTechDocs/ref/arithmeticoperators.html - http://www.maths.lth.se/na/courses/NUM115/NUM115-11/backslash.html