使用 ARPACK 计算特征值的时间取决于什么?

计算科学 scipy
2021-12-24 21:21:31

我的目标是计算大型对称稀疏矩阵的 k 个最小特征值。为此,我在使用 ARPACK 的移位反转模式下使用 python scipy 的 eigsh 方法。矩阵通常有大约 900,000-1,000,000 行。现在,我系统上这些矩阵的计算时间通常在 30 分钟左右。矩阵越大,花费的时间就越长——这对我来说很有意义。然后有一个矩阵只有大约 780,000 行,其计算时间会爆炸式增长。大约需要 10 个小时才能完成。在机器上运行的其他任何重要的东西都不会占用显着的资源。我运行了 3 次,它总是需要这么长时间,并且我仔细检查了我是否正确计算了矩阵。我唯一注意到的是这个矩阵比其他矩阵更稀疏。

所以我的问题是,这里会发生什么?除了矩阵的大小,还有什么能以这种方式影响计算时间?不幸的是,我对线性代数并不了解,我真正了解 ARPACK 究竟是做什么的(意思是,Lanczos 算法的工作原理)。这里有高手吗?

1个回答

特征分布控制着 Lanczos 算法的收敛性。当特征值“分离良好”时,Lanczos 算法应该相当快。当某些特征值是聚类或倍数时,计算聚类(或多个)特征值会减慢收敛速度。特征值的分布也很重要(即最小值与最大值之间的比率)。有关更多详细信息,您可以查看 ARPACK 用户指南(和/或 Parlett 中的特征值估计,“对称特征值问题”)。

  • 如果求k-10、k-5、k-2、k、k+2、k+5、k+10个特征值,时间变化大吗?如果是这样,则表明存在“聚集/多个”特征值。
  • 您可以增加 Krylov 子空间的大小(即参数 ncv)。
  • eigsh 的默认公差是机器精度。你可以增加容忍度。