MATLAB中的广义特征向量?

sle*_*dav 5 matlab

有一种方法可以获得广义特征向量,以获得具有单个或至少非常少的命令的高多重特征值?如果我可以使用每个特征值的多重性1 [V,D] = eig(A),但该命令不适用于多个特征值.

bla*_*bla 5

根据 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 ]; 
Run Code Online (Sandbox Code Playgroud)

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

 poly(A) 
 ans = 
     1.0000   -4.0000    6.0000   -4.0000    1.0000 
Run Code Online (Sandbox Code Playgroud)

这些是特征多项式的系数,因此是 (? ? 1)^4 然后

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


 D = 
 [1] 
 [1] 
 [1] 
 [1] 
Run Code Online (Sandbox Code Playgroud)

因此 MATLAB 只找到两个独立的特征向量

 w1 = [1  0  -1  -1]';     
 w2 = [0  1   3   0]'; 
Run Code Online (Sandbox Code Playgroud)

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

  Id = eye(4);        
  B = A - L*Id; 
Run Code Online (Sandbox Code Playgroud)

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

  B2 = B*B      
  B3 = B2*B 
Run Code Online (Sandbox Code Playgroud)

我们发现 B2 ? 0,但 B3 = 0,所以应该有一个长度为 3 的链与
特征值相关联?= 1。选择第一个广义特征向量

 u1 = [1  0  0  0]'; 
Run Code Online (Sandbox Code Playgroud)

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

 u2 = B*u1 
 u2 = 
     34 
     22 
    -10 
    -27 
Run Code Online (Sandbox Code Playgroud)

 u3 = B*u2 
 u3 = 
     42 
      7 
    -21 
    -42 
Run Code Online (Sandbox Code Playgroud)

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

  • 在 Matlab 的最新版本中,“eigensys”不再存在。`eig(sym(A))` 可以用作替代品,但输出不会完全匹配。此外,“poly”的替代方案是“charpoly”,它返回符号结果。 (3认同)