奇异值分解(SVD)

特征值分解是利用矩阵的对角化来完成的:A=QQ-1,但这种分解方法需要满足一个前提条件,即A是方阵。

 

奇异值分解(SVD)可以对m x n的矩阵进行分解。我们希望找到一个n x n正交方阵V、一个m x m正交方阵U和一个m x n的矩阵∑,使得A满足式子AV=U∑。因为V是正交矩阵,所以V是可逆,且V-1=VT,所以AV=U∑又可以写成A=U∑VT。下面分两步来找到V和U。

 

1)注意到ATA是一个对称方阵,如果存在一个n x n正交方阵V、一个m x m正交方阵U和一个m x n的矩阵∑,使得A=U∑VT成立,则有ATA=V∑TUTU∑VT=V(∑T∑)VT。观察式子ATA=V(∑T∑)VT可知,通过对对称方阵ATA进行特征值分解(对角化),可以得到等式右侧的V(∑T∑)VT,其中V的列向量组为对称方阵ATA的特征向量组,∑T∑为对角矩阵,其对角线上的元素为ATA的特征值。如下图所示,根据∑T∑的性质,可以推出∑:


奇异值分解(SVD)_第1张图片

图中的σi称为矩阵A的奇异值。

 

2)经过1)之后,我们已经找到了一种方法来求取V和∑,但在我们希望A满足的式子A=U∑VT中,还有U未知。为了求U,用AT右乘式子A=U∑VT,得到AAT=U∑VT V∑TUT。因为V是正交方阵,所以VTV=I,AAT=U∑∑TUT。注意到AAT同样是对称方阵,类似于1),我们可以通过对对称方阵AAT进行特征值分解(对角化),得到等式右侧的U∑∑TUT,其中U的列向量组为对称方阵AAT的特征向量组,∑∑T为对角矩阵,其对角线上的元素为AAT的特征值。注意到这里的∑和1)中求得的∑是同一个矩阵,不必惊讶于这一结论,因为根据定理,我们知道AAT与AAT的具有相同的特征值。

 

至此,我们完成了对一个m x n矩阵A的奇异值分解过程。


Matlab代码: 

输入:

A=[1 2;3 4;5 6;7 8]    [U,S,V] = svd(A)

输出:

A =
     1     2
     3     4
     5     6
     7     8

U =
   -0.1525   -0.8226   -0.3945   -0.3800
   -0.3499   -0.4214    0.2428    0.8007
   -0.5474   -0.0201    0.6979   -0.4614
   -0.7448    0.3812   -0.5462    0.0407

S =
   14.2691         0
         0         0.6268
         0             0
         0             0

V =
   -0.6414    0.7672
   -0.7672   -0.6414

通过U*S*V'将得到A

你可能感兴趣的:(SVD,奇异值分解,特征值分解,矩阵对角化,矩阵分解)