我正在尝试使用scipy.sparse.linalg.eigsh在Python中找到一个稀疏Hermitian矩阵列表的最小特征值(以最大的负数,而不是最低的幅度)。矩阵为〜1000x1000,列表长度为〜500-2000。另外,我知道所有矩阵的特征值的上限和下限-分别称为eig_UB和eig_LB。
我尝试了两种方法:
这两种方法都行得通,而且它们的结果一致,但是方法1的速度快2-2.5倍。这似乎是违反直觉的,因为(至少据我所了解的eigsh文档),移位反转模式从对角线中减去sigma,反转矩阵,然后找到特征值,而默认模式直接找到最大幅度的特征值。有人知道什么可以解释性能差异吗?
另一条信息:我已经检查过了,由于移位求逆(即,如果M是原始矩阵,则(M-sigma * identity)^(-1))所产生的矩阵不再稀疏,似乎应该使找到它们的特征值所需的时间更长。
这可能已解决。正如https://arxiv.org/pdf/1504.06768.pdf中指出的那样,您实际上不需要反转移位的稀疏矩阵,然后以某种Lanczos类型的方法重复应用它-您只需要重复解决一个逆问题(M-sigma * identity)* v(n + 1)= v(n)以生成向量{v(n)}的序列。 LU分解后,对于一个稀疏矩阵,可以快速完成此反问题。