zeroieme 发表于 2016-11-21 13:29:46

求助:前n个特征向量的求法

我看了一些资料,求特征向量,只有求出矩阵所有求特征向量或者求最大特征值的主特征向量两类方法。
那么实对称矩阵,按特征值从大到小排列,称主特征向量为第一特征向量。我想求前n个特征向量。有什么方法?
如500*500的我只需要前5个特征向量。

mathe 发表于 2016-11-21 17:26:15

可以试着用迭代法,比如这个对称阵为A,我们任意选择一个单位向量$x_0$,然后依次迭代$x_{n+1}=\frac{Ax_n}{|Ax_n|}$
那么在n充分大时$x_n$将逼近特征值最大的特征值,假设这个特征向量为$v_1$(列向量),对应特征值为$r_1$,也就是$Av_1=r_1v_1$
我们再计算矩阵$B=A-r_1v_1v_1^T$,于是容易看出B和A所有特征向量相同,而特征值除了$v_1$对应的特征值从$r_1$变为0,其余都不变。继续用B迭代可以得出A的绝对值第二大对应的特征向量,...

zeroieme 发表于 2016-11-21 18:33:04

mathe 发表于 2016-11-21 17:26
可以试着用迭代法,比如这个对称阵为A,我们任意选择一个单位向量$x_0$,然后依次迭代$x_{n+1}=\frac{Ax_n}{| ...

原谅我有误差恐惧症
迭代法算出的主特征向量和最大特征值是带误差的,所以矩阵B不能把$r_1$变为0。考虑到特征值递减的“比例”,说不定n次迭代法后累积误差超过了第n+1大的特征值。

有迭代修正的方法吗?类似牛顿迭代法。

zeroieme 发表于 2016-11-21 18:54:29

逐步迭代法我也想过。我的想法是求出主特征向量后降维。但推不出公式。

mathe 发表于 2016-11-21 21:43:44

迭代收敛速度已经挺快的,假设第二大特征值和最大特征值分别为$r_2,r_1$,那么迭代n次特征值误差在$O(|\frac{r_2}{r_1}|^n)$,正常情况很快就达到很高精度了

zeroieme 发表于 2016-11-21 22:24:04

mathe 发表于 2016-11-21 21:43
迭代收敛速度已经挺快的,假设第二大特征值和最大特征值分别为$r_2,r_1$,那么迭代n次特征值误差在$O(|\frac ...

就是说,如果我需要k位精度,第一特征向量需要达到n*k位精度?第二特征向量需求可以降(n-1)*k位?

zeroieme 发表于 2016-11-22 18:25:34

本帖最后由 zeroieme 于 2016-11-22 18:32 编辑

回到本源,精度问题不再是问题:
特征值与特征向量服从关系:(A-λ I)x=0,其实就是个多元方程组。以低精度的特征值、特征向量为初值,用拟牛顿法很快到达要求。
拟牛顿法是二次收敛,比幂法迭代更快。


下一个问题就是第2、第3……特征值的后续计算方法。今天重看了《现代应用数学手册》,原来和我的思路一样是缩小变量个数。称为“收缩法”

补充内容 (2016-11-23 22:58):
瑞利商加速有达到3次收敛,比拟牛顿法快。但修正传递误差还需要解方程。

kastin 发表于 2020-3-18 18:13:27

mathe的方法是幂法,需要特征值分离,分离度越好效果越好,当然,如果能估计出特征根分布(比如上下界),也可以选择合适的位移(比如选择两个特征值之间的中点附近),使得前两个最大特征值之比尽量小,这样收敛就很快了。
如果你的特征值太过于接近,可以考虑QR三对角迭代。
页: [1]
查看完整版本: 求助:前n个特征向量的求法