scipy.sparse.linalg.eigsh中LM和换档反转模式之间的反常速度差?

问题描述 投票:0回答:1

我正在尝试使用scipy.sparse.linalg.eigsh在Python中找到一个稀疏Hermitian矩阵列表的最小特征值(以最大的负数,而不是最低的幅度)。矩阵为〜1000x1000,列表长度为〜500-2000。另外,我知道所有矩阵的特征值的上限和下限-分别称为eig_UBeig_LB

我尝试了两种方法:

  1. 使用移位反转模式和sigma = eig_LB
  2. 从每个矩阵的对角线上
  3. 减去eig_UB(从而将最小的特征值移位为最大的特征值),使用默认的eigsh设置对角化所得矩阵(无移位反转模式,并使用which ='LM') ,然后将eig_UB添加到结果特征值。

这两种方法都行得通,而且它们的结果一致,但是方法1的速度快2-2.5倍。这似乎是违反直觉的,因为(至少据我所了解的eigsh文档),移位反转模式从对角线中减去sigma,反转矩阵,然后找到特征值,而默认模式直接找到最大幅度的特征值。有人知道什么可以解释性能差异吗?

另一条信息:我已经检查过了,由于移位求逆(即,如果M是原始矩阵,则(M-sigma * identity)^(-1))所产生的矩阵不再稀疏,似乎应该使找到它们的特征值所需的时间更长。

sparse-matrix eigenvalue
1个回答
0
投票

这可能已解决。正如https://arxiv.org/pdf/1504.06768.pdf中指出的那样,您实际上不需要反转移位的稀疏矩阵,然后以某种Lanczos类型的方法重复应用它-您只需要重复解决一个逆问题(M-sigma * identity)* v(n + 1)= v(n)以生成向量{v(n)}的序列。 LU分解后,对于一个稀疏矩阵,可以快速完成此反问题。

© www.soinside.com 2019 - 2024. All rights reserved.