实验三矩阵的 QR 分解1、原理矩阵 QR 分解是一种特殊的三角分解,在解决矩阵特征值的计算、最小二乘法等问题中起到重要作用。设 A∈Cm× n,m≥n 且 rankA=n ,则必存在非奇异的上三角n×n 矩阵 R 及 m×n 矩阵 Q,QHQ=I n,使得 A=QR 。用 Gram-Schmidt 方法对矩阵进行QR 分解时,所论矩阵必须是列满秩矩阵。不过,不是列满秩的矩阵只要是方阵,也可以作QR 分解,这就是所谓的Householder 方法。设 w∈Cn 是一个单位向量,令则称 H 是一个 Householder 矩阵或 Householder 变换。2、算法设 u∈Cn 是一个单位向量,则对于任意的Cn 存在 Householder 矩阵 H,使得 Hx=au。其中为实数。设 A 为任一 n 阶矩阵,则必存在n 阶酉矩阵 Q 和 n 阶上三角阵R,使得 A=QR 。证,第一步,将矩阵A 按列分块写成A=(α 1,α 2,⋯, α n)。如果 α 1≠0,则可得,存在 n 阶 householder 矩阵 H1 使得 H1α 1=— a1e1,| a1 |=||α 1||,e1∈Cn 于是有 H1A= (H 1α 1,H 1α 2,⋯, H 1α n)= 11*0naA如果 α 1=0,则直接进行下一步,此时相当于取H 1=I n,而 a1=0. 第二步,将矩阵A n-1 按列分块写成A n-1=(α 1,α 2,⋯, α n-1)。如果 α 1≠0,则可得,存在 n-1 阶 householder 矩阵 H’2 使得 H 1α 1=— a1e1,| a1 |=||α1||, e1∈ Cn 于是有 H’2 A n-1=(H’2α1,H’2α 2,⋯, H’2α n-1)=22*0naA此时,令 H2=2100'TH则 H2 是 n 阶 Householder 矩阵,且使H2H 1A=122**0*0naaA如果 α 1=0,则直接进行下一步。第三步,对n-2 阶矩阵继续进行类似的变换,如此下去,之多在第n-1 步,我们可以找到 Householder 矩阵 H 1,H 2,⋯, H n-1 使得 Hn-1⋯H2H1A=12***0**00*000'nnaa令 Q= H n-1⋯H 2H1,则 Q 是酉矩阵之积,从而必有酉矩阵并且A=QR HIH2)(uaxxaH,23、程序此实验中用到的有householder 子程序和 qrfenjie 主程序,程序如下:function [R,y]=householder(x,i,j)xi=x(i);xj=x(j);r=sqrt(xi^2+xj^2);cost=xi/r;sint=xj/r;R=eye(length(x));R(i,i)=cost;R(i,j)=sint;R(j,i)=-sint;R(j,j)=cost;y=x(:);y([i,j])=[r,0]; function qrfenjie(A)n=size(A,1);R=A;Q=eye(n);for i=1:n-1for j=2:n-i+1 x=R(i:n,i); rt=householder(x,1,j); r=blkdiag(eye(i-1),rt); Q=Q*r',R=r*Rendend4、例子以教材上的矩阵A=[0 -3 1 ;2 1 -6 ;0 4 2] 为例说明上述程序的正确性,在matlab 中输入以下指令:5、结果输入上述指令以后,得到如下的结果:此时可以说,上述程序是正确的。