Décomposition QR : qr

### 6.58.2 Décomposition QR : `qr`

`qr` a comme argument une matrice carrée numérique A d’ordre n.
`qr` factorise numériquement cette matrice sous la forme Q*R où Q est une matrice orthogonale (tQ*Q=I) et R est une matrice triangulaire supérieure.
`qr(A)` renvoie `Q,R` et on a `Q=A*inv(R)`.
On tape :

`qr([[3,5],[4,5]])`

On obtient les matrices `Q, R` :

`[[3/5,4/5],[4/5,-3/5]],[[5,7],[0,1]]`

On tape :

`qr([[1,2],[3,4]])`

On obtient les matrices `Q, R` :

`[[1/(sqrt(10)),3/((sqrt(10))/5*5)],[3/(sqrt(10)),-1/((sqrt(10))/5*5)]], [[sqrt(10),7*sqrt(10)/5],[0,(sqrt(10))/5]]`

Lorsque la matrice est à coefficients réels, on peut ajouter un deuxième argument optionnel -1, -2 ou -3 ou -4 à `qr` pour forcer l’algorithme de Householder ou Givens (coefficients approchés), ou Gram-Schmidt (coefficients exacts)

- -1 : renvoie une 3ème matrice identité (compatibilité avec certaines implémentations)
- -3 : renvoie seulement Q et R
- -2 et -4 : si Gram-Schmidt est utilisé, les colonnes de Q ne sont pas de norme 1, elles sont simplement orthogonales entre elles (ceci évite d’avoir des racines carrées).

On tape :

`Q1,R1,Id1:=qr([[3,5],[4,5]],-1)`

On obtient les matrices `Q1, R1, Id` :

`[[3/5,4/5],[4/5,-3/5]],[[5,7],[0,1]],[[1,0],[0,1]]`

On tape :

`Q2,R2,Id2:=qr([[3,5],[4,5]],-2)`

On obtient la matrice `Q2, R2, Id` :

`[[3,4/5],[4,-3/5]],[[1,7/5],[0,1]],[[1,0],[0,1]]`

On tape :

`Q3,R3:=qr([[3,5],[4,5]],-3)`

On obtient la matrice `Q3, R3` :

`[[3/5,4/5],[4/5,-3/5]],[[5,7],[0,1]]`

On tape :

`Q4,R4:=qr([[3,5],[4,5]],-4)`

On obtient la matrice `Q4, R4` :

`[[3,4/5],[4,-3/5]],[[1,7/5],[0,1]]`

Si on pose : `A:=[[3,5],[4,5]]` on a bien :
`A*inv(R1)=Q1, A*inv(R2)=Q2, A*inv(R3)=Q3, A*inv(R4)=Q4`