Scilab Function

qr - factorisation QR

### Sequence d'appel

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

### Parametres

- `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)`.

### REFERENCES

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.

### Exemples

    // 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))

### Voir aussi

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