matlab使用过程中,总会遇到这两种分解方式,而且文献里面有时候完成的目标相同,使用的分解方式确不一样,今天做个小测试,把这两种分解方式弄清楚一些。
clc;
clear all;
m=3;n=5;
P=randn(m,n);
P=P*diag(1./sqrt(diag(P'*P)));
G=P'*P;
[U1 V1]=eig(G)
[U2 S2 V2]=svd(G)
(1)分解对称矩阵
U1 =
0.6927 -0.1214 -0.0361 -0.5642 -0.4310
-0.3936 -0.6736 0.2685 0.0727 -0.5603
0.3349 -0.1639 -0.5991 0.6672 -0.2388
0.1786 0.5323 0.5762 0.4019 -0.4372
0.4704 -0.4704 0.4855 0.2640 0.5021
V1 =
-0.0000 0 0 0 0
0 0.0000 0 0 0
0 0 0.6022 0 0
0 0 0 1.3739 0
0 0 0 0 3.0240
SVD分解结果U2 =
-0.4310 0.5642 -0.0361 0.5807 0.3967
-0.5603 -0.0727 0.2685 0.1886 -0.7570
-0.2388 -0.6672 -0.5991 0.3542 0.1165
-0.4372 -0.4019 0.5762 -0.2438 0.5058
0.5021 -0.2640 0.4855 0.6651 -0.0083
S2 =
3.0240 0 0 0 0
0 1.3739 0 0 0
0 0 0.6022 0 0
0 0 0 0.0000 0
0 0 0 0 0.0000
V2 =
-0.4310 0.5642 -0.0361 0.6675 0.2212
-0.5603 -0.0727 0.2685 -0.4877 0.6090
-0.2388 -0.6672 -0.5991 0.3074 0.2110
-0.4372 -0.4019 0.5762 0.2544 -0.5005
比较发现,特征值分解G=U1*V1*U1’;特征值由小到大排列
奇异值分解G=U2*S2*V2;特征值由大到小排列
G的秩为3;
特征向量排序也不同
G的秩为3;
U1(:,3)=U2(:,3);U1(:,4)=U2(:,2);U1(:,5)=U2(:,1)
U2(:,1:3)=V2(:,1:3); U2(:,4)<>V2(:;4);U2(:,5)<>V2(:;5)
如果将特征值分解后的对角矩阵重新排序,那么特征向量的列向量就可以一一对应起来了。
[U11 V11]=eig(G);
[Y I]=sort(diag(V11),'descend');
U11=U11(:,I);
U11
diag(Y)
结果如下:
U11 =
-0.4310 -0.5642 -0.0361 -0.1214 0.6927
-0.5603 0.0727 0.2685 -0.6736 -0.3936
-0.2388 0.6672 -0.5991 -0.1639 0.3349
-0.4372 0.4019 0.5762 0.5323 0.1786
0.5021 0.2640 0.4855 -0.4704 0.4704
diag(Y)
ans =
3.0240 0 0 0 0
0 1.3739 0 0 0
0 0 0.6022 0 0
0 0 0 0.0000 0
0 0 0 0 -0.0000
这样与SVD分解就能一致起来了!
(2)非对称矩阵,特征值分解要求必须是方阵
clc;
clear all;
m=5;n=5;
P=randn(m,n);
P=P*diag(1./sqrt(diag(P'*P)));
G=P;
[U1 V1]=eig(G)
[U2 S2 V2]=svd(G)
U1 =
-0.3073 -0.3756 + 0.3105i -0.3756 - 0.3105i 0.3664 -0.5050
-0.8214 0.0800 - 0.1303i 0.0800 + 0.1303i -0.1812 -0.0127
0.2831 0.3275 + 0.4124i 0.3275 - 0.4124i 0.4453 -0.3471
-0.1292 0.5830 0.5830 0.7849 0.2298
-0.3661 0.2809 + 0.2074i 0.2809 - 0.2074i -0.1361 0.7560
V1 =
0.8938 0 0 0 0
0 -0.4582 + 0.8742i 0 0 0
0 0 -0.4582 - 0.8742i 0 0
0 0 0 -0.5291 0
0 0 0 0 -0.0545
特征值分解,发现对角矩阵排列无序。
U2 =
-0.4595 -0.1608 0.3474 -0.7894 0.1388
0.1069 0.3863 0.7315 0.0852 -0.5449
0.3297 -0.7561 -0.0367 -0.1497 -0.5439
0.7814 0.2970 -0.0601 -0.5059 0.2042
0.2411 -0.4063 0.5825 0.3022 0.5884
S2 =
1.6615 0 0 0 0
0 1.0989 0 0 0
0 0 0.9115 0 0
0 0 0 0.4472 0
0 0 0 0 0.0337
V2 =
0.4502 -0.2923 0.6150 0.3385 0.4681
-0.2075 0.6574 0.6351 -0.3474 0.0269
0.3158 0.6844 -0.3833 0.4304 0.3159
-0.5539 0.0286 0.2141 0.7549 -0.2769
0.5898 0.1148 0.1603 0.0979 -0.7770
奇异值分解,发现U2和V2的行向量和列向量关系不大,奇异值和特征值好像也没有任何关系。这样的话,重新排序意义也不大。
只有针对实对称矩阵,特征值分解,然后按照降续排列才能和奇异值建立联系,使得对角矩阵一致,使得特征向量能够一一对应起来。