MATLAB中的广义特征向量?

6

在某些特定情况下,当特征值重复时,有没有一种方法可以使用较少的命令来获得广义特征向量?如果每个特征值的重复次数为1,则可以使用[V,D] = eig(A)命令,但是对于多个特征值,该命令无效。

1个回答

6
根据Matlab文档,[V,D] = eig(A,B)生成一个广义特征值的对角矩阵D和一个完整矩阵V,其列为相应的特征向量,使得A*V = B*V*D。
以下是如何自行操作的示例...首先输入一个样例矩阵A:
 A = [ 35  -12   4   30 ;
       22   -8   3   19 ;
      -10    3   0   -9 ;
      -27    9  -3  -23 ]; 

然后我们将探讨它的特征多项式、特征值和特征向量。

 poly(A) 
 ans = 
     1.0000   -4.0000    6.0000   -4.0000    1.0000 

这些是特征多项式的系数,因此它为(λ-1)^4。

 [V, D] = eigensys(A) 
 V = 
 [ 1, 0] 
 [ 0, 1] 
 [-1, 3] 
 [-1, 0] 


 D = 
 [1] 
 [1] 
 [1] 
 [1] 

因此,MATLAB仅找到了两个独立的特征向量。
 w1 = [1  0  -1  -1]';     
 w2 = [0  1   3   0]'; 

与单重性数为4的特征值λ=1相关联,因此具有缺陷2。
因此我们设置了4x4单位矩阵和矩阵B=A-λI。

  Id = eye(4);        
  B = A - L*Id; 

当 L=1 时,我们计算 B^2 和 B^3。

  B2 = B*B      
  B3 = B2*B 

我们发现B2 ≠ 0,但B3 = 0,因此应该与特征值λ = 1相关联的长度为3的链。选择第一广义特征向量。
 u1 = [1  0  0  0]'; 

我们计算进一步的广义特征向量。
 u2 = B*u1 
 u2 = 
     34 
     22 
    -10 
    -27 

并且。
 u3 = B*u2 
 u3 = 
     42 
      7 
    -21 
    -42 

因此,我们基于(普通的)特征向量u3找到了长度为3的链{u3,u2,u1}。(为了将这个结果与MATLAB的eigensys计算结果协调一致,您可以检查u3-42w1=7w2)

绝对精彩的回答。非常感谢,这正是我在寻找的! - slezadav
3
在最近的 Matlab 版本中,eigensys 已经不存在了。可以使用 eig(sym(A)) 作为替代,但输出的结果可能不完全匹配。另外,poly 的替代方法是 charpoly,它返回符号结果。 - horchler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接