我有以下问题。有一个大小为
A
的矩阵 NxN
,其中 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 个特征向量,依此类推,这样我就可以将结果保存在一个文件中。
您可以尝试使用 SLEPC 库 https://slepc.upv.es/description/ :
“SLEPc 用于特征值问题计算的可扩展库,是一个用于在并行计算机上解决大型稀疏特征问题的软件库。”
阅读用户手册的第二章“EPS:特征值问题求解器”。他们专注于保留稀疏性的方法......但计算的特征值和特征向量数量有限。
我希望我们的矩阵具有良好的属性(例如正定矩阵......)。
EPSIsPositive(EPS eps,PetscBool *pos);
您可能对“频谱切片”感兴趣,以计算给定间隔内的所有特征值...或者您可以设置一个目标并计算该目标周围最接近的特征值。
查看示例 http://www.grycap.upv.es/slepc/documentation/current/src/eps/examples/tutorials/index.html
为什么需要计算这么大的矩阵的所有特征向量?
再见,