% Musterlösung
%
% Numerische Mathematik, SS 2013
%
% QR-Zerlegung mit Givens-Rotationen Q*R = A
%
% Ingolf Busch, Juni 2013

% Input: A Matrix

% Output: Q  orthonormale Matrix
%         R  obere Dreiecksmatrix

function [Q,R]=my_gqr(A)

Q=eye(size(A,1));
R=A;

for j=1:size(A,2)
    for i=size(A,1):-1:(j+1)
        cs = R((i-1):i,j).*[1;-1]/norm(R((i-1):i,j));
        G=cs([1 2;2 1]);G(1,2)=-cs(2);
        R((i-1):i,j:end)=G*R((i-1):i,j:end);
        Q((i-1):i,:)=G*Q((i-1):i,:);
    end
end
Q=Q';