您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 酒店餐饮 > 矩阵的奇异值分解(MATLAB自编)实验报告
2矩阵的奇异值分解2.1原理设A∈Cm×n,s1,s2,…,sr是A的非零奇异值,则存在m阶酉矩阵U∈Cm×n及n阶酉矩阵V,m×n矩阵D,D=10000000000000rss=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)=(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),则因(Aα1,Aα2,…,Aαr)=(s1γ1,s2γ2,…,srγr)即有U1=AV11.其中1=11121rsss第四步:解方程组AAHy=0,对基础解系单位正交化可以求得γr+1,γr+2,…,γm,令U=(γ1,γ2,…,γr,γr+1,γr+2,…,γm).2.3程序流程图输入矩阵AAHA的特征值及对应特征向量AHA的特征值由大到小排列并排列及对应特征向量单位化得V计算U1,U2计算D结束2.4MATLAB程序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));fori=1:rD(i,i)=sqrt(B(i,n+1));endB=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');end2.5运行与数据分析以教材上的A=[10;01;10]为例来验证上述求矩阵的奇异值分解程序的正确性。在matlab运行结果如下:A=[10;01;10];[U1,D1,V1]=SVDecom(A)U1=0.707100.707101.000000.70710-0.7071D1=1.4142001.000000V1=1001在matlab自带求解矩阵奇异值分解函数:[U,S,V]=svd(A)其中U就是所求的U矩阵,S是所求的对角阵,V就是所求的酉矩阵V.在matlab中运行下述指令:A=[10;01;10];[U0,D0,V0]=svd(A)U0=-0.70710-0.707101.00000-0.707100.7071D0=1.4142001.000000V0=-1001对比可见结果的正确性。
本文标题:矩阵的奇异值分解(MATLAB自编)实验报告
链接地址:https://www.777doc.com/doc-5032955 .html