Scilab Function qr - QR decomposition
Calling Sequence
- [Q,R]=qr(X [,"e"])
- [Q,R,E]=qr(X [,"e"])
- [Q,R,rk,E]=qr(X [,tol])
Parameters
- 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)\FR
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) \FR
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.
REFERENCES
qr decomposition are based the Lapack routines DGEQRF, DGEQPF, DORGQR for the real matrices and ZGEQRF, ZGEQPF, ZORGQR for the complex case.
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