我有这个尺寸为 900000x900000 的巨大矩阵 A。我必须求解这个线性方程 Ax=b,其中 b 是大小为 900000x1 的列矩阵。
我使用 matlab 的反斜杠运算符(如 A\b)来尝试获取 x。但是,它冻结了,我无法获得 x。大多数情况下我会出现内存不足的问题。即使我在具有更高内存的计算机上运行它,它也会使系统非常慢,我必须等待才能得到答案。
我怎样才能解出这个方程。我的矩阵非常稀疏。然而,它的波段更宽,但大多数元素为零。b 是一个完整的矩阵。有什么建议么?
我有这个尺寸为 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)