计算一般矩阵最大特征值的最快方法是什么?


27

编辑:我正在测试是否任何特征值具有一个或更大的幅度。

我需要找到一个大型的稀疏,非对称矩阵的最大绝对特征值。

我一直在使用R eigen()函数,该函数使用EISPACK或LAPACK中的QR算法查找所有特征值,然后使用它abs()来获取绝对值。但是,我需要做得更快。

我也尝试过在igraphR包中使用ARPACK接口。但是,它给了我的一个矩阵一个错误。

最终实现必须可以从R访问。

可能会有多个相同大小的特征值。

你有什么建议吗?

编辑: 精度只需要是1e-11。到目前为止,“典型”矩阵是。我已经能够对此进行QR分解。但是,也可以有更大的对象。我目前开始阅读有关Arnoldi算法的信息。我了解这与Lanczsos有关。386×386

EDIT2:如果我有多个矩阵正在“测试”,并且我知道有一个不变的大子矩阵。是否可以忽略/丢弃它?


在这里查看我的答案:scicomp.stackexchange.com/a/1679/979。这是当前的研究主题,当前的方法可以比Lanczos更好。计算奇异值的问题等同于计算特征值的问题。
dranxo 2012年

2
400x400矩阵!=大。如果“可能会有多个相同大小的特征值”,最大表示什么?在麻木的土地上:linalg.eig(random.normal(size =(400,400)))大约需要半秒钟。这太慢了吗?
meawoppl

@meawoppl是的,半秒钟太慢了。这是因为它是另一个算法多次运行的一部分。
功率

1
@power gotcah。您是否有特征向量的近似值?即它可能类似于上一个解决方案,还是您可以对其结构进行有根据的猜测?
meawoppl

Answers:


14

它在很大程度上取决于矩阵的大小,在大规模情况下,还取决于矩阵是否稀疏以及要达到的精度。

如果矩阵太大而不能进行单个分解,并且需要高精度,则Lanczsos算法可能是最快的方法。在非对称情况下,需要Arnoldi算法,该算法在数值上是不稳定的,因此需要一种实现方式来解决(解决起来有些尴尬)。

如果您的问题不是这种情况,请在问题中提供更多具体信息。然后在此答案中添加评论,我将对其进行更新。

编辑:[这是问题的旧版本,最大的特征值。]由于您的矩阵很小且表面上很稠密,因此我将使用初始值对B =(IA)^ {-1}进行Arnoldi迭代进行IA的置换三角分解以使其便宜地乘以B。(或计算一个显式逆,但这代价是分解的3倍。)您想测试B是否具有负特征值。使用B代替A可以更好地分离负特征值,因此,如果有一个,您应该迅速收敛。

但是我很好奇您的问题来自哪里。非对称矩阵通常具有复杂的特征值,因此“最大”甚至没有明确定义。因此,您必须对自己的问题有更多的了解,这可能有助于建议如何更快,更可靠地解决它。

Edit2:用Arnoldi很难获得感兴趣的特定子集。为了可靠地获得绝对最大的特征值,您需要使用原始矩阵进行子空间迭代,并且子空间的大小应匹配或超过期望值接近或大于1的特征值数量。在小矩阵上,这将比QR算法慢,但在大矩阵上,它将快得多。


我需要测试最大特征值是否大于1。精度只需要达到1e-11。到目前为止,“典型”矩阵为386 x386。我已经能够对其进行QR分解。但是,也可以有更大的对象。我目前开始阅读有关Arnoldi算法的信息。我了解这与Lanczsos有关。
供电

此信息属于您的问题-因此,请对其进行编辑,并添加更多信息(为什么特征值是真实的?或最大含义是什么?)-请参阅我的答案的编辑。
阿诺德·诺伊迈耶

对不起,我没有清楚地说明自己。我也没有清楚地解释特征值是复杂的。我正在测试是否任何特征值的大小等于或大于1。
电力

1
这更有意义,但是现在我的配方只有在特征值差确实大于1时才有效。另一方面,新信息可能意味着您除了计算所有特征值外别无选择。-请更新您的问题,以传达更多信息!(IA)1
阿诺德·诺伊迈耶

1
请参阅我的答案中的编辑2
阿诺德·诺伊迈尔

7

电源迭代(或功率法),例如什么丹描述,应该总是收敛,尽管速度。|λn1/λn|

如果接近,速度将会很慢,但是您可以使用外推法解决该问题。它看起来似乎很复杂,但是本文给出了伪代码的实现。 λ Ñλn1λn


1
如果|λ(n−1)| = |λ(n)| ?
供电

@power,则常规的Power Iteration将不会收敛。我不知道外推方法将不同特征值区分开的程度,您必须阅读该文件。
Pedro

2
@power:如果,则重新考虑所有事项 ,则幂次迭代仍将收敛到正确的特征值。所得的本征矢量(您似乎也无意)将是对应于和的本征矢量的线性组合。λ Ñ λ ñ - 1|λn1|=|λn|λnλn1
2012年

您是否引用支持该论文的学术论文或书籍?另外,如果\ lambda_ {n}很复杂怎么办?
功率

5
如果最大模量有几个不同的特征值,则功率迭代仅在特殊情况下收敛。它通常以某种不可预测的方式振荡。
Arnold Neumaier'4

5

最近对此进行了一些很好的研究。新方法使用“随机算法”,只需要对矩阵进行几次读取即可获得最大特征值的良好准确性。这与幂迭代相反,后者需要多次矩阵矢量乘法才能达到高精度。

您可以在此处阅读有关新研究的更多信息:

http://math.berkeley.edu/~strain/273.F10/martinsson.tygert.rokhlin.randomized.decomposition.pdf

http://arxiv.org/abs/0909.4061

这段代码将为您完成:

http://cims.nyu.edu/~tygert/software.html

https://bitbucket.org/rcompton/pca_hgdp/raw/be45a1d9a7077b60219f7017af0130c7f43d7b52/pca.m

http://code.google.com/p/redsvd/

https://cwiki.apache.org/MAHOUT/stochastic-singular-value-decomposition.html

如果您没有选择的语言,则可以轻松滚动自己的随机SVD。它只需要矩阵向量乘法,然后调用现成的SVD。


4

在这里,您将找到Jacobi-Davidson算法的算法介绍,该算法可计算最大特征值。

本文探讨了数学方面。JD允许使用一般(实数或复数)矩阵,并可用于计算特征值范围。

在这里,您可以找到各种库实现JDQR和JDQZ(包括C接口,应该可以从R链接到该接口)。


我找不到任何明确指出Jacobi-Davidson方法适用于真实的通用矩阵的文献。
电力

除非每篇文章都明确规定了限制条件,否则收敛论点将依赖于无关紧要的限制条件。
死息2012年

是京东的另一种解释。所考虑的矩阵是完全通用的。没有使用特殊的结构,并且比较和对比了Hermitian矩阵特有的结果,例如,一般矩阵的收敛是二次的,但是Hermitian矩阵是三次的。
死息2012年

谢谢你 我找不到用于通用矩阵的任何C代码,因此必须编写自己的代码。与算法的链接似乎仅适用于Hermetian矩阵。
供电

1
@power在文献中也不会找到表明标准QR实现收敛于真实,通用矩阵的结果-这是一个开放的问题,实际上不久前,在LAPACK中找到了QR代码的反例。
Federico Poloni 2014年

2

在您的原始帖子中,您说:

“我还尝试过在igraph R软件包中使用ARPACK接口。但是,它给我的其中一个矩阵带来了错误。”

我想知道更多关于该错误的信息。如果您可以在某个地方公开使用此矩阵,我会对在其上尝试ARPACK感兴趣。

基于上面的内容,我希望ARPACK能够很好地提取稀疏矩阵的最大(或几个最大)特征值。更具体地说,我希望Arnoldi方法在这种情况下能很好地工作,这当然是ARPACK所基于的。

上面提到了当感兴趣区域中的特征值间隔很近时,幂方法的缓慢收敛。Arnoldi通过迭代多个向量而不是幂方法进行迭代来改进此方法。


届时我是否能找到自己的作品。一年前,我从事此工作。
电力

0

这不是最快的方法,但相当快速的方法是反复用矩阵命中(初始为随机)矢量,然后对每几步进行归一化。最终它将收敛到最大的特征向量,并且单个步骤的范数增益就是相关的特征值。

当最大特征值明显大于任何其他特征值时,此方法效果最佳。如果另一个特征值的大小接近最大值,那么将需要一段时间才能收敛,并且可能难以确定它是否已经收敛。


1
但是,感谢Dan:在我的矩阵中,其他一些特征值将具有与最大特征值类似(如果不相同)的大小。您的方法类似于幂迭代和瑞利商迭代吗?Batterson和Smillie(1990)写道,对于某些非对称矩阵,Rayleigh商迭代不会收敛。Batterson,S.,Smillie,J(1990)“非对称矩阵的瑞利商迭代”,计算数学,第55卷,编号191,P 169-178

如果其他特征值的大小与最大特征值的大小相同……那么这些值也不也是“最大特征值”吗?
2012年

@EMS:它们仍将是“最大特征值”,但是存在多个以上最大特征值仍会杀死收敛。
2012年

我只是想知道您希望其收敛到哪个特征值。当存在明显的最大特征值时,就意味着诸如瑞利商/幂方法之类的东西。您的问题要求找到最大的特征值,但听起来这实际上并没有为您的问题定义好。我只是被帖子标题误导了。
2012年

-1

R包rARPACK对我有用。它似乎非常快,因为它只是ARPACK的接口,ARPACK是稀疏线性代数的标准软件包(意味着计算一些特征值和特征向量)。


欢迎来到SciComp!正如问题所指出的那样,ARPACK不适用于OP,因此该答案并没有真正的帮助。
克里斯蒂安·克拉森

@HoangDT这个问题约会前rARPACK
功率
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.