提问者:小点点

寻找巨大且非常稀疏矩阵的特征值


我有以下问题。有一个大小为NxN的矩阵A,其中N=200 000。它非常稀疏,每行中正好有M元素,其中M={6,18,40,68,102}(我有5种不同的场景),其余都是零。

现在我想得到矩阵A的所有特征值和特征向量。

问题是,我不能把矩阵A到内存中,因为它是大约160 GB的数据。我正在寻找的是一个软件,允许很好地存储稀疏矩阵(没有零,我的矩阵只有几MB),然后把这个存储的矩阵没有零到计算特征值和向量的算法。

你们谁能给我推荐一个软件吗?

编辑:我发现我可以重新配置我的矩阵A,这样它就变成了一个带矩阵。然后我可以使用LAPACK来获取特征值和特征向量(具体来说:http://software.intel.com/sites/products/documentation/doclib/iss/2013/mkl/mklman/GUID-D3C929A9-8E33-4540-8854-AA8BE61BB08F.htm)。问题是,我需要所有的向量,因为我的矩阵是NxN,我不能允许LAPACK将解决方案(所有特征向量)存储在内存中。最好的方法是一个函数,它会先给我K个特征向量,然后我重新运行程序以获取下一个K个特征向量等等,这样我就可以将结果保存在文件中。


共1个答案

匿名用户

您可以尝试使用SLEPC库http://www.grycap.upv.es/slepc/description/summary.htm:

“SLEPc特征值问题计算的可扩展库,是一个用于解决并行计算机上大型稀疏特征值问题的软件库。”

阅读他们用户手册的第二章,“EPS:特征值问题求解器”。他们专注于保持稀疏性的方法…但是计算了有限数量的特征值和特征向量。

我希望我们的矩阵具有良好的性质(例如正定…)。

 EPSIsPositive(EPS eps,PetscBool *pos);

您可能会对“频谱切片”感兴趣,以计算给定区间内的所有特征值……或者您可以设置一个目标并计算围绕该目标的最接近的特征值。

看http://www.grycap.upv.es/slepc/documentation/current/docs/manualpages/EPS/EPSSetWhichEigenpairs.html#EPSSetWhichEigenpairs

参见示例http://www.grycap.upv.es/slepc/documentation/current/src/eps/examples/tutorials/index.html

为什么需要计算这么大的矩阵的所有特征向量?

拜拜,