% QR decomposition of R + u*v^T function [Q,R]=QR_Ruv(R,u,v) n = length(u); Q = eye(n); % zero out u(2:n) using Givens rotations; update R for i=n:-1:2, rot=Givens(u(i-1:i)); u(i-1:i)=rot*u(i-1:i); R(i-1:i,i-1:n) = rot*R(i-1:i,i-1:n); Q(i-1:n,i-1:i) = Q(i-1:n,i-1:i)*rot'; end % add u(1)*v' to the first row of R R(1,:) = R(1,:) + u(1)*v'; % return R to upper triangular form for i=2:n rot=Givens(R(i-1:i,i-1)); R(i-1:i,i-1:n) = rot*R(i-1:i,i-1:n); Q(:,i-1:i) = Q(:,i-1:i)*rot'; end