matlab中反斜杠运算符的问题



我有一个维度为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)

相关内容

  • 没有找到相关文章