QR QR Decomposition of a Matrix

Section: Transforms/Decompositions


Computes the QR factorization of a matrix. The qr function has multiple forms, with and without pivoting. The non-pivot version has two forms, a compact version and a full-blown decomposition version. The compact version of the decomposition of a matrix of size M x N is
  [q,r] = qr(a,0)

where q is a matrix of size M x L and r is a matrix of size L x N and L = min(N,M), and q*r = a. The QR decomposition is such that the columns of Q are orthonormal, and R is upper triangular. The decomposition is computed using the LAPACK routine xgeqrf, where x is the precision of the matrix. FreeMat supports decompositions of single and double types. The second form of the non-pivot decomposition omits the second 0 argument:

  [q,r] = qr(a)

This second form differs from the previous form only for matrices with more rows than columns (M > N). For these matrices, the full decomposition is of a matrix Q of size M x M and a matrix R of size M x N. The full decomposition is computed using the same LAPACK routines as the compact decomposition, but on an augmented matrix [a 0], where enough columns are added to form a square matrix. Generally, the QR decomposition will not return a matrix R with diagonal elements in any specific order. The remaining two forms of the qr command utilize permutations of the columns of a so that the diagonal elements of r are in decreasing magnitude. To trigger this form of the decomposition, a third argument is required, which records the permutation applied to the argument a. The compact version is

  [q,r,e] = qr(a,0)

where e is an integer vector that describes the permutation of the columns of a necessary to reorder the diagonal elements of r. This result is computed using the LAPACK routines (s,d)geqp3. In the non-compact version of the QR decomposition with pivoting,

  [q,r,e] = qr(a)

the returned matrix e is a permutation matrix, such that q*r*e' = a.