技术文章: 矩阵的SVT分解 1
2017-03-24 by:CAE仿真在线 来源:互联网
SVD是Singular Value Decomposition的英文缩写,即奇异值分解,听起来很高深,实际上就是一种将矩阵分解为几个矩阵乘积的一种技术,换句话说,就是用几个矩阵的乘积来拟合已知矩阵。
>> A=[4 4 5;4 5 5;3 3 2;4 5 4;4 4 4;3 5 4;4 4 3;2 4 4;5 5 5]
A =
4 4 5
4 5 5
3 3 2
4 5 4
4 4 4
3 5 4
4 4 3
2 4 4
5 5 5
>> [U,S,V]=svd(A)
U =
-0.3549 0.0891 0.6351 0.0242 -0.3937 0.2366 -0.0899 0.0312 -0.4921
-0.3842 0.1889 0.1027 -0.2271 0.0478 -0.5715 0.1054 -0.6410 0.0598
-0.2181 -0.3960 -0.2809 -0.4417 -0.1458 -0.2550 -0.5919 0.2276 -0.1822
-0.3568 -0.0756 -0.3300 0.8236 -0.0930 -0.1587 -0.1709 -0.0575 -0.1162
-0.3274 -0.1754 0.2024 0.0195 0.8759 0.1294 -0.0595 0.0958 -0.1551
-0.3318 0.3326 -0.4802 -0.2235 -0.0131 0.6394 -0.0832 -0.2872 -0.0164
-0.2999 -0.4399 -0.2304 -0.1342 -0.1418 0.0108 0.7562 0.1483 -0.1773
-0.2774 0.6410 -0.0981 -0.0747 0.0357 -0.2743 0.1160 0.6364 0.0446
-0.4092 -0.2192 0.2530 0.0243 -0.1551 0.1618 -0.0743 0.1198 0.8061
S =
21.1167 0 0
0 2.0140 0
0 0 1.4239
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
V =
-0.5277 -0.8221 0.2139
-0.6205 0.2010 -0.7580
-0.5801 0.5327 0.6161
我们来验证一下,看看U、S、V三个矩阵相乘是否等于A。
>> U*S*V
ans =
3.3181 6.6778 -1.1818
3.9606 6.8245 -1.9340
3.1568 3.4119 -0.6269
4.3424 5.9122 -1.7857
3.7000 5.7656 -1.0335
3.6780 5.5298 -2.4278
4.0818 4.8533 -0.8852
2.3711 5.0006 -2.3177
4.6250 7.2070 -1.2919
这是怎么回事呢?
答案是:要对V进行一下转置才行。
>> V'
ans =
-0.5277 -0.6205 -0.5801
-0.8221 0.2010 0.5327
0.2139 -0.7580 0.6161
>> U*S*V'
ans =
4.0000 4.0000 5.0000
4.0000 5.0000 5.0000
3.0000 3.0000 2.0000
4.0000 5.0000 4.0000
4.0000 4.0000 4.0000
3.0000 5.0000 4.0000
4.0000 4.0000 3.0000
2.0000 4.0000 4.0000
5.0000 5.0000 5.0000
这回就对了:A=U*S*V’。
S =
21.1167 0 0
0 2.0140 0
0 0 1.4239
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
3、U和V与自己的转置矩阵相乘等于单位矩阵,即对角线上的元素全为1的对角阵。
>> U*U'
ans =
1.0000 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 0.0000
-0.0000 1.0000 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000
0.0000 -0.0000 1.0000 0 0.0000 -0.0000 0.0000 -0.0000 0.0000
-0.0000 -0.0000 0 1.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000
-0.0000 -0.0000 0.0000 -0.0000 1.0000 -0.0000 -0.0000 -0.0000 -0.0000
-0.0000 0.0000 -0.0000 0.0000 -0.0000 1.0000 -0.0000 0.0000 -0.0000
-0.0000 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 1.0000 -0.0000 0.0000
-0.0000 0.0000 -0.0000 0.0000 -0.0000 0.0000 -0.0000 1.0000 -0.0000
0.0000 -0.0000 0.0000 -0.0000 -0.0000 -0.0000 0.0000 -0.0000 1.0000
>> V*V'
ans =
1.0000 -0.0000 -0.0000
-0.0000 1.0000 -0.0000
-0.0000 -0.0000 1.0000
用前面的例子验证一下。
其中:
u=U(:,1:3)表示截取矩阵U的前三列;
s=S(1:3,:)表示截取矩阵S的前三行。
>> A=[4 4 5;4 5 5;3 3 2;4 5 4;4 4 4;3 5 4;4 4 3;2 4 4;5 5 5];
A =
4 4 5
4 5 5
3 3 2
4 5 4
4 4 4
3 5 4
4 4 3
2 4 4
5 5 5
>> [U,S,V]=svd(A)
U =
-0.3549 0.0891 0.6351 0.0242 -0.3937 0.2366 -0.0899 0.0312 -0.4921
-0.3842 0.1889 0.1027 -0.2271 0.0478 -0.5715 0.1054 -0.6410 0.0598
-0.2181 -0.3960 -0.2809 -0.4417 -0.1458 -0.2550 -0.5919 0.2276 -0.1822
-0.3568 -0.0756 -0.3300 0.8236 -0.0930 -0.1587 -0.1709 -0.0575 -0.1162
-0.3274 -0.1754 0.2024 0.0195 0.8759 0.1294 -0.0595 0.0958 -0.1551
-0.3318 0.3326 -0.4802 -0.2235 -0.0131 0.6394 -0.0832 -0.2872 -0.0164
-0.2999 -0.4399 -0.2304 -0.1342 -0.1418 0.0108 0.7562 0.1483 -0.1773
-0.2774 0.6410 -0.0981 -0.0747 0.0357 -0.2743 0.1160 0.6364 0.0446
-0.4092 -0.2192 0.2530 0.0243 -0.1551 0.1618 -0.0743 0.1198 0.8061
S =
21.1167 0 0
0 2.0140 0
0 0 1.4239
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
V =
-0.5277 -0.8221 0.2139
-0.6205 0.2010 -0.7580
-0.5801 0.5327 0.6161
>> U*S*V'
ans =
4.0000 4.0000 5.0000
4.0000 5.0000 5.0000
3.0000 3.0000 2.0000
4.0000 5.0000 4.0000
4.0000 4.0000 4.0000
3.0000 5.0000 4.0000
4.0000 4.0000 3.0000
2.0000 4.0000 4.0000
5.0000 5.0000 5.0000
>> u=U(:,1:3)
u =
-0.3549 0.0891 0.6351
-0.3842 0.1889 0.1027
-0.2181 -0.3960 -0.2809
-0.3568 -0.0756 -0.3300
-0.3274 -0.1754 0.2024
-0.3318 0.3326 -0.4802
-0.2999 -0.4399 -0.2304
-0.2774 0.6410 -0.0981
-0.4092 -0.2192 0.2530
>> s=S(1:3,:)
s =
21.1167 0 0
0 2.0140 0
0 0 1.4239
>> u*s*V'
ans =
4.0000 4.0000 5.0000
4.0000 5.0000 5.0000
3.0000 3.0000 2.0000
4.0000 5.0000 4.0000
4.0000 4.0000 4.0000
3.0000 5.0000 4.0000
4.0000 4.0000 3.0000
2.0000 4.0000 4.0000
5.0000 5.0000 5.0000
很明显,截取U的前3列和S的前3行后,U、S、V’相乘仍然可以得到矩阵A。
>> A=[0.6 0.7 0.8 0.2;0.3 0.5 0.1 0.9;0.0 0.15 -0.3 0.8;0.48 0.5 0.76 -0.16]
A =
0.6000 0.7000 0.8000 0.2000
0.3000 0.5000 0.1000 0.9000
0 0.1500 -0.3000 0.8000
0.4800 0.5000 0.7600 -0.1600
>> rank(A)
ans =
2
>> [U S V]=svd(A)
U =
-0.7103 0.1697 -0.0198 -0.6828
-0.4541 -0.5911 0.5911 0.3083
-0.0989 -0.6759 -0.7290 -0.0440
-0.5287 0.4061 -0.3447 0.6609
S =
1.7152 0 0 0
0 1.2586 0 0
0 0 0.0000 0
0 0 0 0.0000
V =
-0.4758 0.0949 0.2159 -0.8473
-0.5850 -0.0597 0.6462 0.4865
-0.5747 0.4672 -0.6373 0.2127
-0.3179 -0.8770 -0.3601 -0.0115
>> u=U(:,1:2)
u =
-0.7103 0.1697
-0.4541 -0.5911
-0.0989 -0.6759
-0.5287 0.4061
>> s=S(1:2,1:2)
s =
1.7152 0
0 1.2586
>> v=V(:,1:2)
v =
-0.4758 0.0949
-0.5850 -0.0597
-0.5747 0.4672
-0.3179 -0.8770
>> v'
ans =
-0.4758 -0.5850 -0.5747 -0.3179
0.0949 -0.0597 0.4672 -0.8770
>> u*s*v'
ans =
0.6000 0.7000 0.8000 0.2000
0.3000 0.5000 0.1000 0.9000
0.0000 0.1500 -0.3000 0.8000
0.4800 0.5000 0.7600 -0.1600
相关标签搜索:技术文章: 矩阵的SVT分解 1 HFSS电磁分析培训 HFSS培训课程 HFSS技术教程 HFSS无线电仿真 HFSS电磁场仿真 HFSS学习 HFSS视频教程 天线基础知识 HFSS代做 天线代做 Fluent、CFX流体分析 HFSS电磁分析