基于Householder变换的QR分解

01.function [Q,R]=qrhs(A)02.% 基于Householder变换,将方阵A分解为A=QR,其中Q为正交矩阵,R为上三角阵03.%04.% 参数说明05.% A:需要进行QR分解的方阵06.% Q:分解得到的正交矩阵07.% R:分解得到的上三角阵08.%09.% 实例说明10.% A=[-12 3 3; 3 1 -2; 3 -2 7]; 11.% [Q,R]=qr(A) % 调用MATLAB自带的QR分解函数进行验证12.% [q,r]=qrhs(A) % 调用本函数进行QR分解13.% q*r-A % 验证 A=QR14.% q'*q % 验证q的正交性15.% norm(q) % 验证q的标准化,即二范数等于116.% 17.% 线性代数基础知识18.% 1.B=P*A*inv(P),称A与B相似,相似矩阵具有相同的特征值19.% 2.Q*Q'=I,称Q为正交矩阵,正交矩阵的乘积仍为正交矩阵20.% 21.% 注意:我们也可以基于Givens变换,对方阵A进行QR分解,但是相对繁琐些,参见http://www.matlabsky.com/thread-4850-1-1.html22.%23.% by dynamic of Matlab技术论坛24.% see also http://www.matlabsky.com25.% contact me matlabsky@gmail.com26.% 2010-01-17 22:49:5127.%28.n=size(A,1); 29.R=A; 30.Q=eye(n); 31.for i=1:n-132.x=R(i:n,i); 33.y=[1; zeros(n-i,1)]; 34.Ht=householder(x,y); 35.H=blkdiag(eye(i-1),Ht); 36.Q=Q*H; 37.R=H*R; 38.end

function [H,rho]=householder(x,y) % 求解正交对称的Householder矩阵H,使Hx=rho*y,其中rho=-sign(x(1))*||x||/||y|| % % 参数说明 % x:列向量 % y:列向量,x和y必须具有相同的维数 % % 实例说明 % x=[3 5 6 8]'; % y=[1 0 0 0]'; % [H,rho]=householder(x,y); % H*x-rho*y % 验证Hx=rho*y % H'*H % 验证正交 % % 关于HouseHolder变换 % 1.H=I-2vv',其中||v||=1,我们称H为反射(HouseHolder)矩阵,易证H对称且正交 % 2.如果||x||=||y||,那么存在HouseHolder矩阵H=I-2vv,其中v=±(x-y)/||x-y||,使Hx=y % 3.如果||x||≠||y||,那么存在HouseHolder矩阵H,使Hx=rho*y,其中rho=-sign(x(1))*||x||/||y|| % 4.Householder矩阵,常用于将一个矩阵A通过正交变换对角阵 % x=x(:); y=y(:); if length(x)~=length(y) error('The Column Vectors X and Y Must Have The Same Length!'); end rho=-sign(x(1))*norm(x)/norm(y); y=rho*y; v=(x-y)/norm(x-y); I=eye(length(x)); H=I-2*v*v';


文章出处: http://blog.sina.com.cn/s/blog_62b52e290100ydgn.html
??

    推荐阅读