Scilab Website | Contribute with GitLab | Mailing list archives | ATOMS toolboxes
Scilab Online Help
2024.0.0 - English


qr

QR decomposition

Syntax

[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 columns 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.

Report an issue
<< polar Factorization rankqr >>

Copyright (c) 2022-2024 (Dassault Systèmes)
Copyright (c) 2017-2022 (ESI Group)
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Tue Oct 24 14:30:03 CEST 2023