我正在尝试计算大型(40000x40000)、稀疏、不对称矩阵的所有特征向量/特征值。我正在使用 MATLAB 并且有 3 GB 的工作内存。我计算它们的方式是通过扫描(如此处建议 - http://www.mathworks.com/support/solutions/en/data/1-A0QRGR/index.html?product=SL&solution=1-A0QRGR)。我所有的特征值都是负数。我从最负的特征值附近开始,使用eigs,然后选择最大值。我在该最大值加上 1E-5 上重复 eigs 以避免使用偏移等于特征值的 eigs,然后收集大于该最大值加上 1E-14 的特征值(和相应的特征向量)以避免由于数值错误而出现重复的特征值. 我重复此操作,直到一组新特征值的最大值接近 0。但是,我似乎总是比总数少一些(~5)个特征值。我已经检查了最大值是复数的可能性,并确保复共轭已被制成表格,但这并没有做任何事情。此外,一些(~2)零特征值具有相应的完全为 NaN 的特征向量。我目前完全不知道如何进行,
如何计算大型稀疏非对称矩阵的所有特征值/特征向量?
计算科学
矩阵
稀疏矩阵
2021-12-22 06:06:37
1个回答
在 40,000 个特征值/特征向量的过程中,如果至少有几个比您允许的 1e-14 容差更接近,我一点也不感到惊讶,这就是为什么您缺少一些。如果您真的需要所有这些特征向量,最简单的解决方案就是在 matlab 中找到一台具有足够内存的计算机来执行此操作。正如 Wolfgang 所指出的,这可能需要大约 20gb+ 的内存;在单台计算机上推动了易处理性的极限,但您可以尝试找到一个可行的。另一种选择是设置大量虚拟内存(交换空间),请记住这可能会非常慢。所以要么买一台更大的电脑,使用你已经拥有的特征对,或者只是使用交换空间并等待。
此外,您使用了短语“可以精确计算特征对的矩阵”。请记住,您永远不会“精确地”计算这些。它们是由迭代方法确定的,并且会像任何其他方法一样受到所有浮点错误的影响。
其它你可能感兴趣的问题