在椭圆方程的有限差分离散化过程中,以及在二维域的各个方面应用 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。
提前感谢您的帮助和建议。
最佳三位一体