Please note that the recommended version of Scilab is 6.1.1. This page might be outdated.

See the recommended documentation of this function

# 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

### Used Functions

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

## Comments

Add a comment:Please login to comment this page.