qr

Scilab Function
Last update : 25/04/2007

qr - factorisation QR

### Calling Sequence

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

### Parameters

- `X` : matrice réelle ou complexe
- `tol` : nombre réel positif
- `Q` : matrice carrée unitaire
- `R` : matrice de même dimensions que `X`
- `E` : matrice de permutation
- `rk` : entier (rang de `X` )

### Description

`[Q,R] = qr(X)` renvoie une matrice triangulaire supérieure `R` de même dimensions que `X` et une matrice carrée othogonale (unitaire dans le cas complexe) `Q` telles que `X = Q*R` . `[Q,R] = qr(X,"e")` renvoie une decomposition de taille réduite: si `X` est une matrice `m x n` avec `m > n` alors seulement les `n` premières colonnes de `Q` sont calculées ainsi que les `n` premières lignes de `R` .

Il découle de `Q*R = X` que la `k` ième colonne de `X` peut s'exprimer comme une combinaison linéaire des `k` premieres colonnes de `Q` (avec les coefficients `R(1,k), ..., R(k,k)` . Les `k` premieres colonnes de `Q` forment une base orthogonale du sous espace généré par les Les `k` premieres colonnes de `X` . Si la colonne `k` de `X` est une combinaison linéaire des `p` premiéres colonnes de `X` alors les éléments `R(p+1,k), ..., R(k,k)` sont nuls. Dans cette situation `R` est une matrice trapézoidale supérieure. Si `X` est de rang `rk` alors les lignes `R(rk+1,:), R(rk+2,:), ...` sont nulles.

`[Q,R,E] = qr(X)` renvoie une matrice de permutations (de colonnes) `E` , une matrice triangulaire supérieure `R` dont les éléments diagonaux sont classés par ordre décroissant et une matrice unitaire `Q` telles que `X*E = Q*R` . si `rk` est le rang de `X` les `rk` premiers éléménts diagonaux de `R` sont tous non nuls. `[Q,R,E] = qr(X,"e")` renvoie une decomposition de taille réduite: si `X` est une matrice `m x n` avec `m > n` alors seulement les `n` premières colonnes de `Q` sont calculées ainsi que les `n` premières lignes de `R` .

`[Q,R,rk,E] = qr(X [,tol])` renvoie de plus `rk` =rang estimé de `X` . Plus précisément, `rk` est le nombre d'éléments diagonaux de `R` supérieurs à `tol` . La valeur par défaut de `tol` est `R(1,1)*%eps*max(size(R))`

renvoie `rk` = rang estimé de `X` . Ici, `rk` est le nombre d'éléments diagonaux de `R` supérieurs à `R(1,1)*%eps*max(size(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

`rank` , `svd` , `rowcomp` , `colcomp` ,

### Used Function

La décomposition QR est basée sur les routines Lapack DGEQRF, DGEQPF, DORGQR pour les matrices réelles et ZGEQRF, ZGEQPF, ZORGQR pour le cas complexe.