我有一个维度为900000x900000的巨大矩阵A。我必须求解这个线性方程Ax=b,其中b是大小为900000x1的列矩阵。
我使用了matlab的反斜杠运算符,比如A\b来尝试获取x。然而,它冻结了,我无法获取x。大多数情况下,我会遇到内存不足的问题。即使我在内存更高的计算机上运行它,它也会使系统非常慢,我不得不等待答案。
我怎样才能解这个方程。我的矩阵相当稀疏。然而,它的波段更宽,但大多数元素都是零。b是一个全矩阵。有什么建议吗?
我做了一个项目,在这个项目中,我们也使用了如此大但幸运的是非常稀疏的矩阵。使用如此大的矩阵,你会非常迷失直接方法:你永远无法计算逆,因为它将是一个密集矩阵,你永远无法存储。此外,像LU或Cholesky因子分解这样的方法非常昂贵,因为它们再次创建了一个重要的填充,即销毁零。
一个可行的替代方案是使用迭代方法。如果你知道你的矩阵是对称的和正定的,试试共轭梯度法:
x = pcg(A, b); %# Computes a solution to Ax = b, with A symm. pos-def.
如果这个方法收敛的话,我只想试试看。恐怕要证明肯定性的假设并不容易。
如果你没有得到一个解决方案,还有更多的迭代方法。例如:
bicg - BiConjugate Gradient Method
bicgstab - BiConjugate Gradient Method (stabilized)
lsqr - Least Squares QR Method
gmres - Generalized Minimum Residual Method (I like this a lot)