MATLAB中的广义特征向量?

MATLAB中的广义特征向量?,matlab,Matlab,如果特征值的多重性很高,有没有一种方法可以用一个或至少很少的命令来获得广义特征向量?对于每个特征值的重数为1的情况,我可以使用[V,D]=eig(A),但该命令不适用于多重特征值。根据Matlab文档,[V,D]=eig(A,B)生成广义特征值的对角矩阵D和列为相应特征向量的完整矩阵V,以便A*V=B*V*D 下面是一个如何自己做的例子。。。首先,我们输入一个样本矩阵a: A = [ 35 -12 4 30 ; 22 -8 3 19 ; -10

如果特征值的多重性很高,有没有一种方法可以用一个或至少很少的命令来获得广义特征向量?对于每个特征值的重数为1的情况,我可以使用
[V,D]=eig(A)
,但该命令不适用于多重特征值。

根据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 然后

因此,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; 
当我们计算B^2和B^3时,L=1

  B2 = B*B      
  B3 = B2*B 
我们发现B2≠ 0,但B3=0,因此应该有一个长度为3的链与
特征值λ=1。选择第一广义特征向量

 u1 = [1  0  0  0]'; 
我们计算进一步的广义特征向量

 u2 = B*u1 
 u2 = 
     34 
     22 
    -10 
    -27 

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

答案绝对精彩。非常感谢,这正是我想要的!在较新版本的Matlab中,
eigensys
不再存在
eig(sym(A))
可以用作替代,尽管输出不完全匹配。另外,
poly
的替代方法是
charpoly
,它返回符号结果。
 u2 = B*u1 
 u2 = 
     34 
     22 
    -10 
    -27 
 u3 = B*u2 
 u3 = 
     42 
      7 
    -21 
    -42