# Householder Algorithm finding Q

32 views (last 30 days)
Frederick Melanson on 8 Mar 2021
Answered: Athul Prakash on 12 Mar 2021
Hi, i have this algorithm:
function [Q,R] = householder(A)
[m,n]=size(A);
Q=eye(m);
for k=1:n
z = -sign(A(k,k))*norm(A(k:m,k));
v = [zeros(k-1,1); A(k,k)-z; A(k+1:m,k)];
f = v'*v;
if f == 0, continue; end
for j = k:n
c = v'*A(:,j);
A(:,j) = A(:,j)-(2*c/f)*v;
end
end
R=A;
end
I get the correct R matrix, but I can't seem to find Q correctly. Please let me know ASAP
Jan on 9 Mar 2021
Edited: Jan on 9 Mar 2021
Terms like "ASAP" are not appropriate, if you ask voluntary members of an internet forum to help you.
What did you try to determine Q?
Frederick Melanson on 9 Mar 2021
I added an extra forloop at the end like this:
for j=k:m
c = v'*Q(:,j);
Q(:,j) = Q(:,j)-(2*c/f)*v;
end
Q=Q';
I get the lower triangular part of Q correctly, the problem is with the upper half of the matrix

Athul Prakash on 12 Mar 2021
Hi Frederick,
You may prefer the MATLAB built-in qr() function.
[Q,R] = qr(M);
See this documentation:
Alternately, you may search the Mathworks File Exchange for alternate implementations of Householder algorithm. For example:
These are submissions by other MATLAB users, and not part of the MATLAB product. It is not tested or qualified by Mathworks, so use at your own responsibility.