QR Factorization Using Householder Transformations
이전 댓글 표시
function [Q,R]=QRfactor(A)
[m,n]=size(A);
R=A; %Start with R=A
Q=eye(m); %Set Q as the identity matrix
for k=1:m-1
x=zeros(m,1);
x(k:m,1)=R(k:m,k);
g=norm(x);
v=x; v(k)=x(k)+g;
%Orthogonal transformation matrix that eliminates one element
%below the diagonal of the matrix it is post-multiplying:
s=norm(v);
if s~=0, w=v/s; u=2*R'*w;
R=R-w*u'; %Product HR
Q=Q-2*Q*w*w'; %Product QR
end
end
for A=[-2 2 3; 1 3 5; -3 -1 2]
I got the answers Q and R different from when I use [Q,R]=qr(A). Where am I wrong with code.
댓글 수: 1
John D'Errico
2015년 1월 12일
Please learn to use the code button when you post code. It takes only one click of the mouse to do so.
채택된 답변
추가 답변 (2개)
Francesco Onorati
2016년 6월 9일
2 개 추천
The reason why there are differencies in the sign is that for numerical stability the 2-norm of each vector is taken with the opposite sign of the pivotal element of the vector itself. As you take always the norm as positive, sometimes it is in agreement with MATLAB code, sometimes it is not (here I'm supposing MATLAB uses Housolder transformation to do QR decomposition).
Davide Poggiali
2020년 4월 20일
You just have to change two lines
g=-sign(x(k))*norm(x);
v=x; v(k)=x(k)-g;
to get what you're looking for. source: wiki
카테고리
도움말 센터 및 File Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!