function X = basicqr_apply_q (QRdata, X) [M, N] = size(QRdata.QR); if size(X,1) ~= M, error(sprintf("matrix must be conformal with QR, leading dimension %d",M)); endif for j = min(M,N):-1:1, h=[1;QRdata.QR(j+1:M,j)]; X(j:M,:) -= QRdata.tau(j)*h*h'*X(j:M,:); endfor endfunction