矩阵的特征值分解

在线性代数中,在很多情况下需要求矩阵的特征值。在MATLAB中求矩阵特征值的函数是eig和eigs。其中函数eigs主要应用于稀疏矩阵。函数eig的语法格式有如下几种。

D= eig (A):D为矩阵A的特征向量矩阵。

D= eig(A,B):D为矩阵A和B的广义特征向量矩阵。

[V,D] = eig(A):V和D分别为特征向量矩阵与特征值矩阵,因此满足A*V=V*D。

[V,D] = eig(A,'nobalance'):禁止“平衡”程序的运行。当在矩阵A中有的元素小到与截断误差相当时,这样做可以减少计算的误差。

[V,D] = eig(A,B):V和D分别为矩阵A和B的广义特征向量矩阵与特征值矩阵,因此满足A*V=B*V*D。

[V,D] = eig(A,B,flag):使用某种分解算法来计算矩阵的特征值与特征向量,参数flag可以取“chol”或“qz”。V和D分别为矩阵A和B的广义特征向量矩阵与特征值矩阵。其中,参数flag取“chol”表示对B矩阵使用Cholesky分解算法来计算矩阵A和B的特征值与特征向量。如果矩阵A为对称矩阵,矩阵B为对称正定矩阵,则此算法为默认算法。参数flag取“qz”,则忽略对称性,即不管矩阵A和B是否为对称矩阵,均把它们当成非对称矩阵来计算。

在命令窗口中输入

code.matlab
>> B = [3 -2 -.9 2*eps;-2 4 -1 -eps;-eps/4 eps/2 -1 0;-.5 -.5 .1 1];
>> [VB,DB] = eig(B)
VB =
  	0.6153   	-0.4176  	-0.0000  	-0.3305
   	-0.7881   	-0.3261  	-0.0000   	-0.2949
   	-0.0000   	-0.0000  	0.0000   	-0.8136
   	0.0189  	0.8481   	1.0000   	-0.3765
DB =
    5.5616         0         0         0
         0    1.4384         0         0
         0         0    1.0000         0
         0         0         0   -1.0000

在命令窗口中输入

code.matlab
>> a=[1 2 0;2 5 -1;4 10 -1];
>> [V,D] = eig(a,'nobalance')
V =
   -0.2679   -1.0000    0.5000
   -0.3660    0.3660    0.0000
   -1.0000   -0.2679    1.0000
D =
    3.7321         0         0
         0    0.2679         0
         0         0    1.0000

在命令窗口中输入

code.matlab
>> a=[1 3 4;2,6,5;3 2,4];
>> b=[1 2 0;2 5 -1;4 10 -1];
>> [V,D] = eig(a,b,'chol')
V =
   1.0000             0.8609 - 0.1391i   0.8609 + 0.1391i
  -0.4411             -0.1323 - 0.0229i  -0.1323 + 0.0229i
  -0.3686             0.0671 + 0.0486i   0.0671 - 0.0486i
D =
 -15.2537                  0               0
       0             1.1268 + 0.3271i        0
       0                  0             1.1268 - 0.3271i