奇异值分解在矩阵理论中非常重要,也有很多实际运用,比如推荐系统,利用满秩分解还能节约存储空间。
在介绍原理之前,先说一下一些概念:
1 酉(you,三声,我都不知道这个字怎么读,哈哈)矩阵。
如果n阶复矩阵A满足:
则称之为酉矩阵,是不是和正交矩阵的定义很相似,
AH
指的是A的共轭对称,如果A是实矩阵,则就是转置,其实我们基本遇到的就是实矩阵。
2 定义:设
AϵCm∗n
,如果存在非实数
σ
和非零向量
uϵCn,vϵCm
使得
Au=σv,AHv=σu
,则称
σ
为A的奇异值,u和v分别对应于奇异值
σ
的有奇异向量和左奇异向量。
由上式可得:
AHAu=σAHv=σ2u,AAHv=σAu=σ2v
.
我们可以看出特征值与奇异值的关系是:矩阵与矩阵共轭转置的乘积构成的矩阵的特征值的开方就是原矩阵的奇异值。
有如下定理(内容来自教材书,附有证明)
接下来,我想实现以下SVD算法。
给出一个特殊的例子(例子也是书上的)
A=[0 1;-1 0;0 2;1 0];
A_t=A'*A%特殊之处在于A_t就是一个对角矩阵,可以直接知道奇异值和特征向量,从而知道U
A_t1=diag((sqrt(diag(A_t))).^(-1))
U=eye(size(A,2))
V1=A*U*A_t1%由U得到V1
V2=null(V1','r')%V1与V2是正交的
V_2=sqrt(sum(V2.^2))
V_2_1=repmat(V_2,size(V2,1),1)
V_2_2=vpa(V2./V_2_1,4)
V=vpa(cat(2,V1,V_2_2),4)
m=size(A,1)-size(A_t,1)
n=size(A_t,2)
A=vpa(V*cat(1,sqrt(A_t),zeros(m,n))*U',4)%矩阵恢复
需要注意的是
V1
与
V2
是正交的,所以求解
V1x=0
就可以得出
V2
,这在证明里可以体现出来。
如有错误,欢迎指出。