### 6.50.5 Décomposition LU : `lu`

`lu` a comme argument une matrice carrée A d’ordre n (numérique ou symbolique).
`lu(A)` renvoie une permutation p de 0..n−1, une matrice triangulaire inférieure L avec des 1 sur sa diagonale et une matrice triangulaire supérieure U.
Ces matrices sont telles que :

- P*A=L*U, où P est la matrice de permutation associée à p ( que l’on peut calculer avec `P:=permu2mat(p)`),
- l’équation A*x=B équivaut à :

  L*U*x=P*B=p(B) where p(B)=[bp(0),bp(1)..bp(n−1)], B=[b0,b1..bn−1]

On peut aussi définir à partir de p la matrice de permutation Pn par :
Pn[i, p(i)]=1 et
Pn[i, j]=0 si j ≠ p(i).
C’est la matrice obtenue en permutant, selon la permutation p, les lignes de la matrice unité.
On peut utiliser la fonction `permu2mat` : `permu2mat(p)` renvoie la matrice `P` d’ordre n.
On tape :

`(p,L,U):=lu([[3,5],[4,5]])`

On obtient :

`[1,0],[[1,0],[0.75,1]],[[4,5],[0,1.25]]`

On a, en effet, n=2 donc :

P[0,p(0)]=P2[0,1]=1, P[1,p(1)]=P2[1,0]=1, P=[[0,1],[1,0]]

Vérification :
On tape :

`permu2mat(p)*A; L*U`

On obtient:

`[[4.0,5.0],[3.0,5.0]],[[4.0,5.0],[3.0,5.0]]`

Il faut noter que la permutation est différente lorsque les données sont exactes (le choix du pivot est plus simple). On tape :

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

On obtient :

`[1,0],[[1,0],[3,1]],[[1,2],[0,-2]]`

On tape :

`lu([[1.0,2],[3,4]])`

On obtient :

`[1,0],[[1,0],[0.333333333333,1]],[[3,4], [0,0.666666666667]]`