特征值的迭代估计
1. 特征值近似的背景
在科学计算和工程应用中,精确地计算出所有特征值往往既有难度且没有必要。例如,对于的矩阵,当时,特征方程没有通用的解析解。再例如前面介绍过的动力系统,我们通常只需要确定最大的特征值(即主特征值)即可,而无需求解所有特征值。基于这些原因,获取主特征值的近似值往往已经足够满足需求。为了高效地估算最大特征值,下面介绍一种经典的迭代方法:幂法。
2. 幂法:主特征值估算
如果一个矩阵反复对任意一个初始向量做乘法,那么经过足够多的次数后,最终得到的向量的方向会无限趋近于主特征向量的方向。我们设计这样一个实验,取矩阵和初始向量如下:
矩阵的特征值(主特征值)、,对应的特征向量为。下面绘制出每次迭代后向量的方向, 请观察这个过程:
开通会员解锁全部动画
随着迭代次数的增加,新的向量与主特征向量之间的夹角开始趋近于。 我们在迭代到第次后停止,此时向量,可近似为特征向量。特征值可以通过向量和中最大分量的比值来近似:
幂法正是基于这一现象,用于估算矩阵的主特征值及其对应的特征向量。其基本思想是:从一个初始向量出发,不断地对其进行矩阵幂乘操作,利用主特征值的绝对值显著大于其他特征值的特性,使向量逐步沿着主导特征向量的方向收敛。
3. 幂法的数学基础
假设是一个矩阵,其特征分解为:
其中 是特征向量矩阵, 是包含特征值的对角矩阵,并满足。 对于一个初始向量,可以表示为特征向量的线性组合:
对反复施加矩阵后:
由于,当时:
即, 的方向趋于主导特征向量,而其模长以 的速率增长。
4. 算法步骤
在前面的示例中,第次迭代停止后, 向量的最大分量和已经很大了,如果我们再继续迭代下去,向量的分量值就会迅速膨胀、甚至溢出。其实,我们只需要关心相邻两个向量之间的比值就可以近似得到主特征值以及主特征向量。所以,幂法在每次迭代得到新的向量后,会通过对新向量进行归一化处理来防止数值溢出。具体步骤如下:
初始向量可以是任意的非零向量,但为了方便计算,的最大分量建议不超过。
对于:
- 计算矩阵乘积:
- 找到的最大分量(绝对值最大元素):
- 将归一化:
当两次迭代之间的特征值估算的相对变化量足够小时(也可以是连续两个向量间的夹角),算法终止。
输出和对应的特征向量。
我们这次用幂法的步骤重新迭代计算的主特征值,初始条件以及终止条件如下:
借助代码,可得幂法迭代的结果如下:
迭代次数 k | 归一化后 | ε(弧度) | |
---|---|---|---|
0 | (-0.5, 1) | (-0.5, 1) | N/A |
1 | (-0.1, 1.1) | (-0.09, 1) | 0.373 |
2 | (0.64, 1.18) | (0.54, 1) | 0.5846 |
3 | (1.77, 1.31) | (1, 0.74) | 0.4403 |
4 | (2.39, 1.09) | (1, 0.45) | 0.2099 |
5 | (2.16, 0.75) | (1, 0.34) | 0.0948 |
6 | (2.08, 0.61) | (1, 0.3) | 0.0444 |
7 | (2.04, 0.55) | (1, 0.27) | 0.0215 |
8 | (2.02, 0.53) | (1, 0.26) | 0.0105 |
9 | (2.01, 0.51) | (1, 0.26) | 0.0052 |
10 | (2, 0.51) | (1, 0.25) | 0.0026 |
11 | (2, 0.5) | (1, 0.25) | 0.0013 |
12 | (2, 0.5) | (1, 0.25) | 0.0006 |
主特征值收敛于,主特征向量收敛于,其渐进轨迹如下:
开通会员解锁全部动画
5. 幂法的收敛性
幂法的收敛速度决定了算法的运算效率,而收敛速度主要和下面三个因素有关:
- 初始向量的选择:如果初始向量在主特征向量方向上的分量为,理论上算法将无法收敛到主特征向量。例如用前面的示例中的矩阵,以及初始向量:由于这里特意选择了的非主特征向量作为初始向量,幂法的迭代过程满足:。此时,算法将无法收敛到主特征向量。相反,如果初始向量在主特征向量方向上的分量越大,幂法的收敛速度会越快。
特征值的分布:主特征值与次特征值的比值越大,算法收敛越快。反之,如果该比值越接近(也即),收敛速度越慢。
矩阵的性质:对于正定矩阵(对称矩阵,且特征值为正 ),幂法可以有效地分离主特征向量。而对于具有复特征值的矩阵,由于复特征值可能导致迭代过程中的振荡行为,使得算法无法收敛到实数特征向量,因此幂法可能会失效。
6. 反幂法:任意特征值估算
反幂法最典型的应用场景是当我们需要计算矩阵的某个特定特征值,并且已经有一个接近该特征值的初始估计。反幂法是基于幂法的思想,通过构造特定的矩阵来实现对任意特征值的逼近。下面做一个简单推导,假设矩阵的特征值为,那么就有如下结论:
我们构造矩阵,那么的特征值就是。因此,的特征值如下:
如果接近某个特征值,则会成为矩阵的主特征值。这样,问题就被转化为了用幂法来近似计算的主特征值。接下来就是选择一个初始向量,然后开始迭代计算过程:
要注意的是,在实际计算中并不会直接计算出逆矩阵后再和相乘计算,而是通过解线性方程组的方式来计算:
后面迭代的步骤和幂法步骤完全一样,不过每次得到估计后,需要转化为原特征值的估计:
下面我们通过一个具体示例来演示反幂法的具体步骤。
7. 反幂法实例分析
给定矩阵,初始估计,初始向量如下:
迭代结束条件设置为相邻两个特征估计值的相对变化量。下面是次迭代过程:
通过解线性方程组来计算:
将初始条件代入,可得:
解方程组:
解得:
用的最大分量作为缩放因子进行归一化:
更新向量:
重复上面的过程,直到满足结束条件,由于初始预估值和实际特征值很接近,所以算法收敛速度很快。下面是迭代的结果:
0 | (0.57359 ,0.064649,1) | (4.450374,0.501601,7.758805) | 7.758805 | 2.028886 |
1 | (0.505364,0.004453,1) | (5.013058,0.044172,9.9197) | 9.919700 | 2.000809 |
2 | (0.500378,0.000313,1) | (5.001247,0.003126,9.994931) | 9.994931 | 2.000051 |
3 | (0.500027,0.000022,1) | (5.000089,0.00022 ,9.999646) | 9.999646 | 2.000004 |
4 | (0.500002,0.000002,1) | (5.000006,0.000015,9.999975) | 9.999975 | 2.000000 |
5 | (0.5, 1.09e-7, 1) | (5, 1.09e-6, 9.999998) | 9.999998 | 2.000000 |