【问题标题】:Generalized eigenvectors in MATLAB?MATLAB中的广义特征向量?
【发布时间】:2012-10-01 23:07:37
【问题描述】:

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

【问题讨论】:

    标签: matlab


    【解决方案1】:

    根据 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,所以应该有一个长度为3的链与
    特征值 λ = 1 。选择第一个广义特征向量

     u1 = [1  0  0  0]'; 
    

    我们计算进一步的广义特征向量

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

     u3 = B*u2 
     u3 = 
         42 
          7 
        -21 
        -42 
    

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

    【讨论】:

    • 绝妙的答案。非常感谢,这正是我想要的!
    • 在最新版本的 Matlab 中,eigensys 不再存在。 eig(sym(A)) 可以用作替代品,尽管输出不会完全匹配。此外,poly 的替代方法是 charpoly,它返回符号结果。
    猜你喜欢
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 2018-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多