在MATLAB中寻找大型稀疏矩阵的零空间



在椭圆方程的有限差分离散化过程中以及Neumann BCs在2D域所有边上的应用,我有一个很大的稀疏矩阵。我需要找到它的转置的空空间来强制执行两侧的一致性条件。对于50X50的计算域和100X100我可以用32 GB的可用RAMMathematica和MATLAB分别具有NullSpace和null的可用全矩阵命令。

如果计算域为500X250(我通常拥有的顺序)存储尺寸为(500X250)X(500X200)的矩阵是125GB,并且是高度禁止的。我使用稀疏矩阵来存储这个超级矩阵,并且我不再有空间约束。但我不能在这个问题上使用"null"命令,因为它只适用于全矩阵。MATLAB建议在稀疏矩阵上使用"SVDS"命令。SVDS(A)只给出前6个奇异值和奇异向量。还有另一个命令SVDS(A,k,sigma),它给出"k"奇异值和"sigma"标量奇异值周围的向量".当我使用sigma=0来找到对应于"零"值的奇异向量时,这将是来自零空间基的向量,我得到一个错误,即"sigma"太接近矩阵的本征值。

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

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

最佳Trinath

我想你可以尝试一些分解。

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的向量将为零空间提供基础)。

希望这能有所帮助。

干杯,

GL

最新更新