到这个博客为止,我一直认为如果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