4

在椭圆方程的有限差分离散化过程中,以及在二维域的各个方面应用 Neumann BC,我有一个大的稀疏矩阵。我需要找到其转置的空空间以在任一侧强制执行一致性条件。对于 50X50 和 100X100 的计算域,我可以在 Mathematica 和 MATLAB 中使用 32 GB 的可用 RAM 分别使用 NullSpace 和 null 的可用完整矩阵命令来做到这一点。

如果计算域是 500X250(这是我通常拥有的数量级),则存储大小为 (500X250)X(500X250) 的矩阵所需的 RAM 为 125 GB,并且非常令人望而却步。我使用稀疏矩阵来存储这个超级矩阵,我不再有空间限制了。但我不能对此使用“空”命令,因为它仅适用于完整矩阵。MATLAB 建议在稀疏矩阵上使用“SVDS”命令。SVDS(A) 仅给出前 6 个奇异值和奇异向量。有另一个命令 SVDS(A,k,sigma) 给出“k”奇异值和围绕“sigma”标量奇异值的向量。当我使用 sigma=0 以找到对应于“零”值的奇异向量时,

我的矩阵是奇异的,因此它的特征值之一是“零”。如何规避此错误?或者有没有更好的方法来使用手头的工具来做到这一点。我手头有 MATLAB 和 Mathematica。

提前感谢您的帮助和建议。

最佳三位一体

4

1 回答 1

1

我想您可以尝试进行某种分解。

http://www.mathworks.co.uk/matlabcentral/fileexchange/11120-null-space-of-a-sparse-matrix

你试过这个吗?

或者也许这个?

http://www.mathworks.co.uk/matlabcentral/newsreader/view_thread/249467

我相信它们应该可以工作,但我自己还没有尝试过。另一种处理方法是进行 QR 分解(如果 k 是矩阵的秩,这将为您提供前 k 个独立列的排列。然后从 k+1 到 n 的向量将为您的 null空间)。

希望这可以帮助。

干杯,

总帐

于 2013-08-28T16:19:19.403 回答