我有一个矩阵每行仅包含 5 个非零元素的稀疏矩阵。现在的问题是对角元素和常数(在矩阵使得) 在每次迭代后更新。如果我使用通常的 Matlab 函数inv
或通过高斯消元法,计算单次迭代的解大约需要 130 秒,并且该问题所需的迭代次数大约为 100-500 次以计算最终解. 如果我不想使用并行计算,需要对此提出一些建议。
稀疏矩阵逆算法
计算科学
线性代数
矩阵
稀疏矩阵
2021-12-09 14:59:44
2个回答
我想到的第一个想法是使用迭代方法来求解线性系统。这可能会加快单次迭代的计算速度(取决于方法(GMRES、共轭梯度、BiCGStab 和 B 的大小),并且将利用矩阵 A 的稀疏性。
此外,迭代方法允许您定义预条件子。如果对角线系数在迭代之间没有太大变化,那么在开始时花一些时间构建一个好的预条件器(例如 ILU)并在所有迭代中重用它可能是值得的。
希望能帮助到你!
编辑:这个问题的答案可能很有用。
您可以使用稀疏分解算法,这意味着计算矩阵,,, 这样在哪里是一个置换矩阵,一个稀疏的下三角矩阵和一个稀疏的上三角矩阵。置换矩阵在那里并以这样的方式计算:和保持相当稀疏(没有它,一般情况下并非如此,如另一个答案所示)。那么当以这种形式分解,求解具有任意 rhs 的线性系统是很简单的。如果是对称定的,那么有一个稀疏的cholesky分解(),如果它只是对称的,那么它可以分解为, 和一个对角矩阵。
稀疏分解有几种可用的实现:SuperLU、Choldmod、Mumps、TAUCS(取决于您是否需要,要么)。其中大多数可能存在 MATLAB 绑定。
其它你可能感兴趣的问题