qr

QR decomposition

Calling Sequence

[Q,R]=qr(X [,"e"])
[Q,R,E]=qr(X [,"e"])
[Q,R,rk,E]=qr(X [,tol])

Arguments

:X real or complex matrix : :tol nonnegative real number : :Q square orthogonal or unitary matrix : :R matrix with same dimensions as X : :E permutation matrix : :rk integer (QR-rank of X) :

Description

:[Q,R] = qr(X) produces an upper triangular matrix R of the same
dimension as X and an orthogonal (unitary in the complex case) matrix Q so that X = Q*R. [Q,R] = qr(X,”e”) produces an “economy size”: If X is m-by-n with m > n, then only the first n columns of Q are computed as well as the first n rows of R. From Q*R = X , it follows that the kth column of the matrix X, is expressed as a linear combination of the k first columns of Q (with coefficients R(1,k), ..., R(k,k)). The k first columns of Q make an orthogonal basis of the subspace spanned by the k first comumns of X. If column k of X (i.e. X(:,k) ) is a linear combination of the first p columns of X, then the entries R(p+1,k), ..., R(k,k) are zero. It this situation, R is upper trapezoidal. If X has rank rk, rows R(rk+1,:), R(rk+2,:), ... are zeros.
: :[Q,R,E] = qr(X) produces a (column) permutation matrix E, an
upper triangular R with decreasing diagonal elements and an orthogonal (or unitary) Q so that X*E = Q*R. If rk is the rank of X, the rk first entries along the main diagonal of R, i.e. R(1,1), R(2,2), ..., R(rk,rk) are all different from zero. [Q,R,E] = qr(X,”e”) produces an “economy size”: If X is m-by-n with m > n, then only the first n columns of Q are computed as well as the first n rows of R.
: :[Q,R,rk,E] = qr(X ,tol) returns rk = rank estimate of X i.e.
rk is the number of diagonal elements in R which are larger than a given threshold tol.
: :[Q,R,rk,E] = qr(X) returns rk = rank estimate of X i.e. rk is
the number of diagonal elements in R which are larger than tol=R(1,1)*%eps*max(size(R)). See rankqr for a rank revealing QR factorization, using the condition number of R.

:

Examples

// QR factorization, generic case
// X is tall (full rank)
X=`rand`_(5,2);[Q,R]=qr(X); [Q'*X R]

//X is fat (full rank)
X=`rand`_(2,3);[Q,R]=qr(X); [Q'*X R]

//Column 4 of X is a linear combination of columns 1 and 2:
X=`rand`_(8,5);X(:,4)=X(:,1)+X(:,2); [Q,R]=qr(X); R, R(:,4)

//X has rank 2, rows 3 to $ of R are zero:
X=`rand`_(8,2)*`rand`_(2,5);[Q,R]=qr(X); R

//Evaluating the rank rk: column pivoting ==> rk first
//diagonal entries of R are non zero :
A=`rand`_(5,2)*`rand`_(2,5);
[Q,R,rk,E] = qr(A,1.d-10);
`norm`_(Q'*A-R)
`svd`_([A,Q(:,1:rk)])    //span(A) =span(Q(:,1:rk))

See Also

  • rankqr rank revealing QR factorization
  • rank rank
  • svd singular value decomposition
  • rowcomp row compression, range
  • colcomp column compression, kernel, nullspace

Used Functions

qr decomposition is based the Lapack routines DGEQRF, DGEQPF, DORGQR for the real matrices and ZGEQRF, ZGEQPF, ZORGQR for the complex case.

Table Of Contents

This Page