Joh*_*ith 6 matlab linear-algebra sparse-matrix matrix-inverse factorization
我有这个问题,这需要解决X在AX=B.A是15000 x 15000的顺序,是稀疏和对称的.B是15000 X 7500并且不稀疏.解决X的最快方法是什么?
我可以想到两种方式.
X = A\B使用for循环,
invA = A\speye(size(A))
for i = 1:size(B,2)
X(:,i) = invA*B(:,i);
end
Run Code Online (Sandbox Code Playgroud)有没有比上面两个更好的方法?如果没有,我提到的两者之间哪一个最好?
首先第一件事情-永远,永远计算答:这是逆从未除了当A是对角矩阵稀疏.尝试使用简单的三对角矩阵.这条线本身会杀死你的代码 - 记忆方面和性能方面.并且计算逆数在数值上不如其他方法准确.
一般来说,\应该对你有用.MATLAB确实认识到你的矩阵是稀疏的并且执行稀疏因子分解.如果将矩阵B作为右侧,则性能比仅使用b向量求解一个方程组要好得多.所以你正确地做到了.你可以在这里尝试的唯一其他技术是显式调用lu,, chol或者ldl,取决于你拥有的矩阵,并自己执行向后/向前替换.也许你在那里节省一些时间.
事实上,求解线性方程组的方法,特别是稀疏系统,很大程度上取决于问题.但在我想象的几乎任何(稀疏)情况下,15k系统的分解应该只需要几分之一秒.现在这不是一个大型系统.如果您的代码很慢,这可能意味着您的因素不再是稀疏稀疏.您需要确保在稀疏分解期间正确地重新排序矩阵以最小化填充(添加非零条目).这是至关重要的一步.请查看此页面,了解有关如何重新排序系统的一些测试和说明.并简要介绍一下此SO线程的示例重新排序.