在线性代数中,在很多情况下需要求矩阵的特征值。在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