1、2 矩阵的奇异值分解 2.1 原理 设 A Cmn, s1, s2, , sr 是 A 的非零奇异值,则存在 m 阶酉矩阵 U Cmn 及 n 阶酉矩阵 V, mn 矩阵 D, D = 1 0 0 00 0 00 0 00 0 0 0rss= 000使得 A=UDVH 这就是矩阵 A 的奇异值分解 . 2.2 算法 第一步:求出 AHA 的特征值 1 2 r 0= 1r = n ,确定非零奇异值 is = i , i=1,2 , r. 第二步:分别求出矩阵 AHA 的对应于特征值 i 的特征向量并将其单位正交化,得到标准正交向量组 1 , 2 , , n 令 V=( 1 , 2 , , n)
2、=( V1 , V2), V1=( 1 , 2 , , r), V2=( r+1 ,r+2 , , n) 第三步:若 U=( 1 , 2 , , r , r+1 , r+2 , , m) =( U1 , U2),其中 U1=( 1 , 2 , , r), U2=( r+1 , r+2 , , m), 则因( A1 , A2 , , Ar) =( s11 , s22 , , srr) 即有 U1=AV1 1 .其中 1 =11121rsss第四步:解方程组 AAHy = 0,对基础解系单位正交化可以求得 r+1,r+2, , m,令 U =( 1 , 2 , , r , r+1 , r+2 ,
3、, m) . 2.3 程序流程图 输 入 矩 阵 AAHA的 特 征 值 及 对 应 特 征向 量AHA的 特 征 值 由 大 到 小 排列 并 排 列 及 对 应 特 征 向 量单 位 化 得 V计 算 U1 ,U2计 算 D结 束2.4 MATLAB 程序 function U,D,V = SVDecom(A) m,n=size(A); U=zeros(m);V=zeros(n); r=rank(A); D=zeros(m,n); B,C=eig(A*A); x=diag(C); B=B.,x; B=sortrows(B,-(n+1); for i=1:r D(i,i)=sqrt(B(i,
4、n+1); end B=B(:,1:n); B=B.; V=qr(B); V1=V(:,1:r); U(:,1:r)=A*V1*(inv(D(1:r,1:r); U(:,r+1:m)=null(A*A); end 2.5 运行 与 数据 分析 以教材上的 A=1 0;0 1;1 0为例来 验证 上述求矩阵的奇异值分解程序 的正确性 。 在 matlab 运行结果如下 : A=1 0;0 1;1 0; U1,D1,V1 = SVDecom(A) U1 = 0.7071 0 0.7071 0 1.0000 0 0.7071 0 -0.7071 D1 = 1.4142 0 0 1.0000 0 0 V1 = 1 0 0 1 在 matlab 自带 求解矩阵奇异值分解 函数 : U, S, V = svd(A)其中 U 就是所求的 U 矩阵, S 是所求的对角阵, V 就是所求的酉矩阵V. 在 matlab 中运行 下述指令: A=1 0;0 1;1 0; U0,D0,V0 = svd(A) U0 = -0.7071 0 -0.7071 0 1.0000 0 -0.7071 0 0.7071 D0 = 1.4142 0 0 1.0000 0 0 V0 = -1 0 0 1 对比可见结果的正确性。