function [Q, R] = Givens(A)
[m, n] = size(A);
Q = eye(m);
for k = 1 : min (m - 1, n)
    for l = k + 1 : n
        r = sqrt(A(k, k) * A(k, k) + A(l, k) * A(l, k));
        c = A(k, k) / r;
        s = A(l, k) / r;
        A([k, l], :) = [c, s; -s, c] * A([k, l], :);
        Q([k, l], :) = [c, s; -s, c] * Q([k, l], :);
    end
end
Q = Q';
R = A;
