-1

我有一个 10000*10000(矩阵 A)稀疏矩阵,每行仅包含 5 个非零元素。

现在的问题是对角元素和常数(在 B 矩阵 st AX=B 中)在每次迭代后都会更新。如果我使用通常的 Matlab 函数:“inv”或通过高斯消除,计算单次迭代的解决方案大约需要 25 秒,并且问题所需的迭代次数有点顺序:100-500计算最终的解决方案:X。

如果我不想使用并行计算,我需要一些建议。
帮助伙计们!:)

4

1 回答 1

-1

叹。人们认为,仅仅因为他们在学校学到了 A*X=B 的解是形成 X=inv(A)*B,就应该这样做。是的,你的教科书说要这样做。令人惊讶的是,那里有成群的人试图教你这样的东西。可悲的是,他们错了,他们教别人教错误的东西,甚至把它写进书里。这种愚蠢在传播,似乎永远不会结束。而且即使教科书的作者自己知道A\B在理论上比inv(A)*B好,用逆矩阵形式写起来还是比较容易的。

警告:你不想形成逆矩阵,上帝保佑,你不想使用高斯消元法。(让专业人士在为您编译的工具中进行类似的编码。)相反,在 MATLAB 中使用反斜杠,这是高效且编写良好的。

X = A\B;

如果您要经常求解同一个系统,请使用 LU 之类的因式分解。更好的是使用许多右手边作为 B 的列,一次解决所有系统。诚然,如果矩阵不断变化,这不是一个选择,但反斜杠仍然是最好的。

(为什么 inv 不是一个好主意?它创建了一个基本完整的矩阵,几乎没有零。它比反斜杠慢,并且在数值上不如反斜杠等稳定)

最后,如果您的矩阵如此稀疏,那么为什么您不以上帝的名义对矩阵使用稀疏存储?对于稀疏矩阵,反斜杠将非常快。

于 2013-06-19T14:19:13.327 回答