到这个博客为止,我一直认为如果K是一个对称阵,那么K的svd分解:
[U,S,V]=svd(K)
U和V是肯定相同的。例如:
K=
0.1590 0.2108 0.3175
0.2108 1.1254 1.1389
0.3175 1.1389 1.5209
其svd分解为:
>> [U,S,V]=svd(K)
U =
-0.1572 0.4260 -0.8910
-0.6336 -0.7355 -0.2399
-0.7575 0.5268 0.3855
S =
2.5393 0 0
0 0.1876 0
0 0 0.0783
V =
-0.1572 0.4260 -0.8910
-0.6336 -0.7355 -0.2399
-0.7575 0.5268 0.3855
可以看出U和V完全相同。但是现在我发现这个常识不对,也就是说对称阵的SVD分解后U和V不一定相同,例如:
K =
0 0 0.3175
0 0 1.1389
0.3175 1.1389 0
其svd分解为:
[U,S,V]=svd(K)
U =
0 0.2686 -0.9633
0 0.9633 0.2686
-1.0000 0 0
S =
1.1823 0 0
0 1.1823 0
0 0 0
V =
-0.2686 0 -0.9633
-0.9633 0 0.2686
0 1.0000 0
可以看出U和V不同。为什么这样,这个要去查书才知道,这里我发现有一种方法可缓解这个问题,就是让对角元素不是0,而是一个非常接近0的数。例如
置K(1,1)=0.0000000001。
K =
0.0000 0 0.3175
0 0 1.1389
0.3175 1.1389 0
>> [U,S,V]=svd(K)
U =
-0.1899 -0.1899 -0.9633
-0.6811 -0.6811 0.2686
-0.7071 0.7071 0.0000
S =
1.1823 0 0
0 1.1823 0
0 0 0.0000
V =
-0.1899 0.1899 -0.9633
-0.6811 0.6811 0.2686
-0.7071 -0.7071 0.0000
转载于:https://blog.51cto.com/dengwanyu/384248