在MATLAB中,计算矩阵A的特征值和特征向量的函数是eig(A),常用的调用格式有5种:
- E=eig(A):求矩阵A的全部特征值,构成向量E。
- [V,D]=eig(A):求矩阵A的全部特征值,构成对角阵D,并求A的特征向量构成V的列向量。
- [V,D]=eig(A,'nobalance'):与第2种格式类似,但第2种格式中先对A作相似变换后求矩阵A的特征值和特征向量,而格式3直接求矩阵A的特征值和特征向量。
- E=eig(A,B):由eig(A,B)返回N×N阶方阵A和B的N个广义特征值,构成向量E。
- [V,D]=eig(A,B):由eig(A,B)返回方阵A和B的N个广义特征值,构成N×N阶对角阵D,其对角线上的N个元素即为相应的广义特征值,同时将返回相应的特征向量构成N×N阶满秩矩阵,且满足AV=BVD。
eig
Find eigenvalues and eigenvectors
Syntax
d = eig(A)
d = eig(A,B)
[V,D] = eig(A)
[V,D] = eig(A,'nobalance')
[V,D] = eig(A,B)
[V,D] = eig(A,B,flag)
d = eig(A)和 [V,D] = eig(A) 最为常用,注意,第一列为对应第一个特征值的特征向量。
4.1.1 特征值和特征向量的求取
【例4.3.1-1】简单实阵的特征值问题。
0.7746 0.7746
0.0430 - 0.6310i 0.0430 + 0.6310i
D =
0.8333 + 2.4438i 0
0 0.8333 - 2.4438i
【例4.3.1-2】本例演示:如矩阵中有元素与截断误差相当时的特性值问题。
-2 4 -1 -eps
-eps/4 eps/2 -1 0
-0.5 -0.5 0.1 1 ];
[V1,D1]=eig(A);ER1=A*V1-V1*D1
[V2,D2]=eig(A,'nobalance');ER2=A*V2-V2*D2
0.0000 0.0000 0.0000 0.0000
0 -0.0000 -0.0000 -0.0000
0.0000 -0.0000 -0.0000 0.0000
0.0000 0.0000 0.0000 -0.5216
ER2 =
1.0e-014 *
-0.2665 0.0111 -0.0559 -0.1055
0.4441 0.1221 0.0343 0.0833
0.0022 0.0002 0.0007 0
0.0194 -0.0222 0.0222 0.0333
【例4.3.1-3】指令eig与eigs的比较。
rand('state',1),A=rand(100,100)-0.5;
t0=clock;[V,D]=eig(A);T_full=etime(clock,t0)
options.tol=1e-8;
options.disp=0;
t0=clock;[v,d]=eigs(A,1,'lr',options);
T_part=etime(clock,t0)
[Dmr,k]=max(real(diag(D)));
d,D(1,1)
0.2200
T_part =
3.1300
d =
3.0140 + 0.2555i
ans =
3.0140 + 0.2555i
vk1=vk1/norm(vk1);v=v/norm(v);
V_err=acos(norm(vk1'*v))*180/pi
D_err=abs(D(k,k)-d)/abs(d)
1.2074e-006
D_err =
4.2324e-010
4.1.2 特征值问题的条件数
【例4.3.2-1】矩阵的代数方程条件数和特征值条件数。
format short e,c_equ=cond(B),c_eig=condeig(B)
1 0 0 0
0 1 0 0
0 0 1 1
0 0 0 1
c_equ =
2.6180e+000
Warning: Matrix is close to singular or badly scaled.
Results may beinaccurate. RCOND = 1.110223e-016.
> In D:\MATLAB6P1\toolbox\matlab\matfun\condeig.m at line 30
c_eig =
1.0000e+000
1.0000e+000
4.5036e+015
4.5036e+015
【例4.3.2-2】对亏损矩阵进行Jordan分解。
[VJ,DJ]=jordan(A);
[V,D,c_eig]=condeig(A);c_equ=cond(A);
DJ,D,c_eig,c_equ
-9 11 -21 63 -252
70 -69 141 -421 1684
-575 575 -1149 3451 -13801
3891 -3891 7782 -23345 93365
1024 -1024 2048 -6144 24572
DJ =
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
0 0 0 0 0
D =
Columns 1 through 4
-0.0408 0 0 0
0 -0.0119 + 0.0386i 0 0
0 0 -0.0119 - 0.0386i 0
0 0 0 0.0323 + 0.0230i
0 0 0 0
Column 5
0
0
0
0
0.0323 - 0.0230i
c_eig =
1.0e+010 *
2.1293
2.0796
2.0796
2.0020
2.0020
c_equ =
2.0253e+018
4.1.3 复数特征值对角阵与实数块特征值对角阵的转化
【例4.3.3-1】把例4.3.1-1中的复数特征值对角阵D转换成实数块对角阵,使VR*DR/VR=A。
[VR,DR]=cdf2rdf(V,D)
0.7746 0
0.0430 -0.6310
DR =
0.8333 2.4438
-2.4438 0.8333
4.1.4 矩阵的谱分解和矩阵函数
【例4.3.4-1】数组乘方与矩阵乘方的比较。
A_Ap=A.^0.3
A_Mp=A^0.3
1.0000 1.2311 1.3904
1.5157 1.6207 1.7118
1.7928 1.8661 1.9332
A_Mp =
0.6962 + 0.6032i 0.4358 + 0.1636i 0.1755 - 0.2759i
0.6325 + 0.0666i 0.7309 + 0.0181i 0.8292 - 0.0305i
0.5688 - 0.4700i 1.0259 - 0.1275i 1.4830 + 0.2150i
【例4.3.4- 2】标量的数组乘方和矩阵乘方的比较。(A取自例4.3.4-1)
pA_M=(0.3)^A
0.3000 0.0900 0.0270
0.0081 0.0024 0.0007
0.0002 0.0001 0.0000
pA_M =
2.9342 0.4175 -1.0993
-0.0278 0.7495 -0.4731
-1.9898 -0.9184 1.1531
【例4.3.4-3】sin的数组运算和矩阵运算比较。(A取自例4.3.4-1)
A_sinM=funm(A,'sin')
0.8415 0.9093 0.1411
-0.7568 -0.9589 -0.2794
0.6570 0.9894 0.4121
A_sinM =
-0.6928 -0.2306 0.2316
-0.1724 -0.1434 -0.1143
0.3479 -0.0561 -0.4602