在线性代数的科学应用中,很少能精确知道特征值。所幸的是,一个较精确的数值近似通常能达到令人满意的效果。实际上,某些应用只需要粗略估计最大特征值。下面介绍的第1个算法很适合这种情况。同样,它为快速估计其他特征值的更有效的方法提供了基础。
幂算法适用于 n × n 矩阵 A 有严格占优特征值(亦称主特征值) λ₁ 的情况。 λ₁ 为主特征值的意思是 λ₁ 的绝对值比其他特征值的绝对值都大。此时,幂算法产生一个近似 λ₁ 的数列和一个近似对应的主特征向量的向量序列。此方法的背景来源于5.6节开头的特征向量分解。
为简单起见,假设 A 可对角化,特征向量 v₁, …, vₙ 是 Rⁿ 的基,并且 v₁, …, vₙ 已经过排列,使对应的特征值 λ₁, …, λₙ 的绝对值递减, λ₁ 是主特征值,即有
c | λ_ 1 | > | λ_ 2 | ≥slant | λ_ 3 | ≥slant … ≥slant | λ_ n | uparrow text 严格大 (1)就像我们在 5.6 节式(2)中看到的,假设 x ∈ Rⁿ, x = c₁v₁ + … + cₙvₙ ,那么
A ^ k boldsymbol x = c _ 1 (λ_ 1) ^ k boldsymbol v _ 1 + c _ 2 (λ_ 2) ^ k boldsymbol v _ 2 + … + c _ n (λ_ n) ^ k boldsymbol v _ n (k = 1, 2, …)假设 c₁ ≠ 0 ,等式除于 (λ₁)^(k)
frac 1(λ_ 1) ^ k A ^ k boldsymbol x = c _ 1 boldsymbol v _ 1 + c _ 2 (frac λ_ 2λ_ 1) ^ k boldsymbol v _ 2 + … + c _ n (frac λ_ nλ_ 1) ^ k boldsymbol v _ n (k = 1, 2, …) (2)由(1),所有分数 λ₂/λ₁,…,λₙ/λ₁ 的值都小于 1,因此,它们的幂趋于零。故
k → ∞ (λ_ 1) ^ - k A ^ k boldsymbol x arrow c _ 1 boldsymbol v _ 1 (3)因此对足够大的 k , A^(k)±bx 的数量倍的方向几乎与特征向量 c₁±bv₁ 的方向相同.由于正的数量倍不会改变向量的方向,因此若给定 c₁ ≠ 0 ,则 A^(k)±bx 的方向几乎与 ±bv₁ 或 -±bv₁ 一致.
设 A=1.8&0.8 0.2&1.2,v₁=4 1,x=-0.5 1 ,那么 A 的特征值是 2 和 1, λ₁=2 的特征空间是过原点和 v₁ 的直线。对 k=0,…,8 ,计算 A^(k)x 并画出过原点和 A^(k)x 的直线。当 k 增大时会出现什么情况?
解
开头三项的计算是
A boldsymbol x = [ l l 1. 8 & 0. 8 0. 2 & 1. 2 ] [ c - 0. 5 1 ] = [ c - 0. 1 1. 1 ]A ^ 2 boldsymbol x = A (A boldsymbol x) = [ l l 1. 8 & 0. 8 0. 2 & 1. 2 ] [ c - 0. 1 1. 1 ] = [ l 0. 7 1. 3 ]A ^ 3 boldsymbol x = A (A ^ 2 boldsymbol x) = [ l l 1. 8 & 0. 8 0. 2 & 1. 2 ] [ l 0. 7 1. 3 ] = [ l 2. 3 1. 7 ]其他项的计算在表 5-1 中给出.
表 5-1 向量的迭代
| k | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| A^(k)x | -0.5 1 | -0.1 1.1 | 0.7 1.3 | 2.3 1.7 | 5.5 2.5 | 11.9 4.1 | 24.7 7.3 | 50.3 13.7 | 101.5 26.5 |
图 5-26 显示了向量 x, Ax, A²x , A³x , A⁴x.其余向量太长难于显示,但画出的线段显示出这些向量的方向.事实上,我们真正想看到的是向量的方向而不是向量本身.这些直线看起来是逼近表示 v₁ 生成的特征空间的直线.更确切地说,由 A^(k)x 确定的直线(子空间)与由 v₁ 确定的直线(特征空间)之间的夹角(当 k → ∞ 时)趋于零.
当 c₁ ≠ 0 时,我们可以对(3)中的向量 (λ₁)⁻k A^(k) x 倍乘,使它们收敛于 c₁ v₁ ,但不能对 A^(k) x 作这种倍乘,因为我们并不知道 λ₁ 。不过可以倍乘 A^(k) x ,使它的最大分量为 1。这样,所得序列 {xₖ} 将收敛于 v₁ 的倍数, v₁ 的倍数的最大分量也是 1。图 5-27 显示了例1 的倍乘序列。我们还可以通过序列 {xₖ} 来估计特征值 λ₁ 。当 xₖ 接近于 λ₁ 的特征向量时,向量 Axₖ 也接近于 λ₁ xₖ ,即 Axₖ 的每一分量接近于 λ₁ 与 xₖ 相应分量的乘积。因为 xₖ 的最大分量是 1,故 Axₖ 的最大分量接近于 λ₁ 。(这些结论的证明省略了。)
估计严格占优特征值的幂算法
Section titled “估计严格占优特征值的幂算法”-
选择一个最大分量为 1 的初始向量 x₀
-
对 k=0,1,…, a. 计算 Axₖ . b. 设 μₖ 是 Axₖ 中绝对值最大的一个分量. c. 计算 xₖ+1=(1/μₖ)Axₖ .
-
几乎对所有选择的 x₀ ,序列 {μₖ} 近似于主特征值,而序列 {xₖ} 近似于对应的特征向量.
设 A = 6 & 5 1 & 2 , x₀ = 0 1.应用幂算法求 A 的主特征值和对应的特征向量的近似值,计算到 k = 5 .
解
本例及下一个例子的计算用 MATLAB 完成,虽然这里看到的有效数字较少,但计算精确到 16 位。先计算 Ax₀ ,然后将 Ax₀ 的最大分量 μ₀ 单位化:
A ±b x _ 0 = [ l l 6 & 5 1 & 2 ] [ l 0 1 ] = [ l 5 2 ], μ_ 0 = 5用 1 / μ₀ 倍乘 Ax₀ 得到 ±bx₁ ,计算 Ax₁ ,并将 Ax₁ 的最大分量单位化:
boldsymbol x _ 1 = frac 1μ_ 0 A boldsymbol x _ 0 = frac 15 [ l 5 2 ] = [ l 1 0. 4 ]A ±b x _ 1 = [ l l 6 & 5 1 & 2 ] [ l 1 0. 4 ] = [ l 8 1. 8 ], μ_ 1 = 8用 1 / μ₁ 倍乘 Ax₁ 得到 ±bx₂ ,计算 Ax₂ ,将 Ax₂ 的最大分量单位化:
boldsymbol x _ 2 = frac 1μ_ 1 A boldsymbol x _ 1 = frac 18 [ l 8 1. 8 ] = [ l 1 0. 2 2 5 ]A ±b x _ 2 = [ l l 6 & 5 1 & 2 ] [ l 1 0. 2 2 5 ] = [ l 7. 1 2 5 1. 4 5 0 ], μ_ 2 = 7. 1 2 5用 1 / μ₂ 倍乘 Ax₂ 得到 x₃ ,一直重复做下去,用MATLAB计算的前5次迭代结果列在表5-2中.
表 5-2 例2 的幂算法
| k | 0 | 1 | 2 | 3 | 4 | 5 |
| xₖ | 0 1 | 1 0.4 | 1 0.225 | 1 0.2035 | 1 0.2005 | 1 0.20007 |
| Axₖ | 5 2 | 8 1.8 | 7.125 1.450 | 7.0175 1.4070 | 7.0025 1.4010 | 7.00036 1.40014 |
| μₖ | 5 | 8 | 7.125 | 7.0175 | 7.0025 | 7.00036 |
从表 5-2 的数据明显看出, {xₖ} 接近于 (1,0.2) , {μₖ} 接近于 7。这样, (1,0.2) 就是特征向量,7 是主特征值。容易通过计算来验证 A1 0.2=6&5 1&21 0.2=7 1.4=71 0.2 。
例2 的序列 {μₖ} 很快收敛于 λ₁=7 是因为 A 的第 2 个特征值 λ₂ 要比 λ₁ 小得多(事实上, λ₂=1 )。通常收敛的快慢取决于比率 |λ₂/λ₁| ,因为用 A^(k)x 的倍数来估值 c₁v₁ 时,主要误差来源于(2)中的向量 c₂(λ₂/λ₁)^(k)v₂ (其他的分数 λⱼ/λ₁ 可能更小)。若 |λ₂/λ₁| 接近于 1,则 {μₖ} 和 {xₖ} 会收敛得很慢,此时,可能需要选择其他近似的方法。
不过幂算法还存在这样的很小可能性,即随机选择的初始向量 x 在 v₁ 的方向上没有分量 (当 c₁=0 时), 但计算机在计算 xₖ 时所产生的舍入误差有可能产生一个向量,该向量在 v₁ 的方向上至少有一个小分量.如果这样的话,xₖ 将收敛于 v₁ 的倍数.
在知道特征值 λ 的一个较好的初始估值 α 后,逆幂法可用来对任一特征值作近似估值。此时,我们令 B = (A - α I)⁻1 ,并对 B 应用幂算法。可以证明,若 λ₁, …, λₙ 是 A 的特征值,则 B 的特征值是
frac 1λ_ 1 - α, frac 1λ_ 2 - α, … , frac 1λ_ n - α而且 A 的对应于 λ₁,…,λₙ 的特征向量是 B 的对应于上面这些特征值的特征向量。(见习题 15 和 16.)例如,假设 α 更接近 λ₂ 而不是 A 的其他特征值,那么 1/(λ₂-α) 将是 B 的严格主特征值。假如 α 确实接近于 λ₂ ,那么 1/(λ₂-α) 比 B 的其他特征值要 “大” 得多。几乎对所有选择的 x₀ ,逆幂法会快速逼近 λ₂ ,下列算法给出了详细步骤。
估计 A 的特征值 λ 的逆幂法
Section titled “估计 AA 的特征值 λλ 的逆幂法”-
选择一个非常接近于 λ 的初始估值 α .
-
选择一个最大分量为 1 的初始向量 x₀ .
-
对 k=0,1,…,
a.从 (A - α I)yₖ = xₖ 解出 yₖ
b.设 μₖ 是 yₖ 中绝对值最大的分量.
c.计算 vₖ = α + (1 / μₖ) .
d.计算 xₖ+1=(1/μₖ)yₖ .
- 几乎对所有选择的 x₀ ,序列 {vₖ} 趋向于 A 的特征值 λ ,而序列 {xₖ} 趋向于对应的特征向量.
B 或者是 (A - α I)⁻1 并没有出现在算法中.在求序列的下一个向量时并没有计算 (A - α I)⁻1±bxₖ ,而是通过解方程 (A - α I)±byₖ = ±bxₖ 来得到 ±byₖ 的(然后用倍乘 ±byₖ 来产生 ±bxₖ + 1 ).因为对每个 k 一定可以从该方程解出 ±byₖ ,故 A - α I 的LU分解式将加快计算过程.
在某些应用中,通常需要知道矩阵 A 的最小特征值,也需要对该特征值作粗略的估计。设21,3.3和1.9是下列矩阵 A 的特征值的估值。求最小特征值,小数位精确到6位。
A = [ c c c 1 0 & - 8 & - 4 - 8 & 1 3 & 4 - 4 & 5 & 4 ]解
两个最小特征值看起来很接近,因此我们对 A-1.9I 应用逆幂法. MATLAB 的计算结果列在表 5-3 中.这里的 x₀ 随机选取, yₖ=(A-1.9I)⁻1xₖ,μₖ 是 yₖ 的最大分量, vₖ=1.9+1/μₖ,xₖ+1=(1/μₖ)yₖ .可以看到,初始的特征值估计得非常好,逆幂法产生的序列收敛很快.最小的特征值正好是 2.
表 5-3 逆幂法
| k | 0 | 1 | 2 | 3 | 4 |
| xₖ | 1 1 1 | 0.5736 0.0646 1 | 0.5054 0.0045 1 | 0.5004 0.0003 1 | 0.50003 0.00002 1 |
| yₖ | 4.45 0.50 7.76 | 5.0131 0.0442 9.9197 | 5.0012 0.0031 9.9949 | 5.0001 0.0002 9.9996 | 5.000006 0.000015 9.999975 |
| μₖ | 7.76 | 9.9197 | 9.9949 | 9.9996 | 9.999975 |
| vₖ | 2.03 | 2.0008 | 2.00005 | 2.000004 | 2.0000002 |
假如没有矩阵最小特征值的估值,则可以简单取 α = 0 来使用逆幂法。假如最小特征值更接近于零而不是其他的特征值,那么这种取值是合理的。
对很多简单的情况,本节给出的两个算法是实用的,它们为特征值估值问题提供了入门知识。另一个更全面和广泛使用的迭代算法是QR算法。比如,MATLAB的命令 eig(A) 的核心是QR算法,这个命令能快速计算出 A 的特征值和特征向量。在5.2节的习题中对QR算法有过简短的描述,进一步的细节参见有关现代数值分析的教材。
你怎样断定给出的向量 x 是矩阵 A 的某个特征向量的好的近似值?如果是,又怎样估计相应的特征值?用下面给出的矩阵 A 和 x 做练习.
和
A = [ c c c 5 & 8 & 4 8 & 3 & - 1 4 & - 1 & 2 ]在习题 1~4 中,给出矩阵 A 和由幂算法产生的序列 {xₖ} 。利用这些数据对 A 的最大特征值进行估计,并求出对应的特征向量。
r l 1. A = & [ l l 4 & 3 1 & 2 ]; [ l 1 0 ], [ l 1 0. 2 5 ], [ l 1 0. 3 1 5 8 ], [ l 1 0. 3 2 9 8 ], & [ l 1 0. 3 3 2 6 ]r l 2. A & = [ c c 1. 8 & - 0. 8 - 3. 2 & 4. 2 ]; [ c 1 0 ], [ c - 0. 5 6 2 5 1 ], [ c - 0. 3 0 2 1 1 ], & [ c - 0. 2 6 0 1 1 ], [ c - 0. 2 5 2 0 1 ]r l 3. A & = [ l l 0. 5 & 0. 2 0. 4 & 0. 7 ]; [ l 1 0 ], [ l 1 0. 8 ], [ l 0. 6 8 7 5 1 ], [ l 0. 5 5 7 7 1 ], & [ l 0. 5 1 8 8 1 ]r l 4. A & = [ l l 4. 1 & - 6 3 & - 4. 4 ]; [ l 1 1 ], [ l 1 0. 7 3 6 8 ], [ l 1 0. 7 5 4 1 ], & [ l 1 0. 7 4 9 0 ], [ l 1 0. 7 5 0 2 ]- 设 A=15&16 -20&-21 ,向量 x,…,A⁵x 分别是重做习题 5.
寻找一个第2个分量为1且接近于 A 的一个特征向量的向量,保留4位小数.验证你的估值,并对 A 的主特征值进行估计.
- 设 A=-2 & -3 6 & 7.利用下列序列 x, Ax, …, A⁵x 重做习题 5.
[M]习题7~12需要用到MATLAB或其他辅助的计算工具.在习题7和8中,利用幂算法及给出的 x₀ ,对 k=1,…,5 ,算出 {xₖ} 和 {μₖ}.在习题9和10中,算出 μ₅ 和 μ₆ .
A = [ l l 6 & 7 8 & 5 ], boldsymbol x _ 0 = [ l 1 0 ]A = [ l l 2 & 1 4 & 5 ], boldsymbol x _ 0 = [ l 1 0 ]A = [ c c c 8 & 0 & 1 2 1 & - 2 & 1 0 & 3 & 0 ], boldsymbol x _ 0 = [ l 1 0 0 ]A = [ c c c 1 & 2 & - 2 1 & 1 & 9 0 & 1 & 9 ], boldsymbol x _ 0 = [ c 1 0 0 ]如果知道某个特征向量的近似值,就可以对特征值作另一估值。若 Ax = λ x ,则 x^(T)Ax = x^(T)(λx) = λ(x^(T)x) ,瑞利商 R(x) = fracx^(T)Axx^(T)x 等于 λ 。假如 x 接近于 λ 对应的特征向量,那么瑞利商就接近于 λ 。当 A 为对称矩阵时 (A^(T) = A) ,瑞利商 R(xₖ) = (xₖ^(T)Axₖ) / (xₖ^(T)xₖ) 的精确数字大致是幂算法产生的倍乘因子 μₖ 的 2 倍,在习题 11 和 12 中通过计算 μₖ 和 R(xₖ)(k = 1, …, 4) 来验证增加的精确度。
A = [ l l 5 & 2 2 & 2 ], boldsymbol x _ 0 = [ l 1 0 ]A = [ c c - 3 & 2 2 & 0 ], x _ 0 = [ c 1 0 ]习题 13 和 14 应用于一个 3 × 3 矩阵 A,其特征
值被估计为 4,-4 和 3.
-
对接近于 4 和 -4 但绝对值不同的特征值,幂算法还有效吗?
-
对接近于 4 和 -4 但绝对值相同的特征值,描述怎样才能得到估计接近于 4 的特征值的序列.
-
假设 Ax = λ x, x ≠ 0,数 α 不是 A 的特征值,令 B = (A - α I)⁻1,在等式 Ax = λ x 的两边减去 α x,用代数方法证明 1 / (λ - α) 是 B 的特征值,x 是其对应的特征向量.
-
设 μ 是习题 15 中矩阵 B 的特征值, x 是对应的特征向量,即有 (A - α I)⁻1 x = μ x ,利用这个等式求 A 的用 μ 和 α 表示的特征值。(注意:因为 B 可逆,故 μ ≠ 0 。)
-
[M] 设 x₀=(1,0,0) ,利用逆幂法对例3 中的矩阵 A 的中间特征值进行估值,计算精确到 4 位小数.
-
[M] 设 A 为习题 9 给出的矩阵, x₀=(1,0,0) ,利用逆幂法对 A 接近于 α=-1.4 的特征值进行估值,计算精确到 4 位小数.
[M]在习题19和习题20中,求(a)最大特征值,(b)接近于零的特征值.设 x₀ = (1,0,0,0,0) ,在求特征值时,要求近似序列的计算精确到4位小数,还包括近似特征向量的计算.
-
A=1&2&3&2 2&12&13&11 -2&3&0&2 4&5&7&2
-
一个常见的误解是:假如 A 有严格主特征值,那么对足够大的 k 值,向量 A^(k)x 近似于 A 的某个特征向量。对下面给出的三个矩阵,当 x=(0.5,0.5) 时,计算并研究 A^(k)x ,并试图得到一般结论(对 2×2 矩阵)。 a. A=0.8 & 0 0 & 0.2 b. A=1 & 0 0 & 0.8 c. A=8 & 0 0 & 2
对给出的 A 和 x,
A boldsymbol x = [ r r r 5 & 8 & 4 8 & 3 & - 1 4 & - 1 & 2 ] [ c 1. 0 0 - 4. 3 0 8. 1 0 ] = [ c 3. 0 0 - 1 3. 0 0 2 4. 5 0 ]如果 Ax 近似于 x 的数倍,那么两个向量相应分量的比率也应该近似于某个常量,故计算:
r l {A x text 的元素 } ÷ {x text 的元素 } = {text 比率 } 3. 0 0 & 1. 0 0 3. 0 0 0 - 1 3. 0 0 & - 4. 3 0 3. 0 2 3 2 4. 5 0 & 8. 1 0 3. 0 2 5Ax 的每一个分量大约是 x 对应分量的 3 倍,故 x 接近于 A 的特征向量,上面比率的任何一个都是特征值的近似值。(若精确到 5 位小数,特征值是 3.02409.)