Παραγοντοποίηση LU : lu

### 1.48.3 Παραγοντοποίηση `LU` : `lu`

`lu` παίρνει ως όρισμα έναν τετραγωνικό πίνακα A μεγέθους n (αριθμητικό ή συμβολικό).
`lu` επιστρέφει μια μετάθεση (διάταξη) p των στοιχείων 0..n−1, έναν κάτω τριγωνικό πίνακα L, με 1 στη διαγώνιο, και έναν άνω τριγωνικό πίνακα U, έτσι ώστε :

- P*A=L*U, όπου P είναι ο πίνακας μεταθέσεων που παράγεται από την p (υπολογίζεται με `P:=permu2mat(p)`),
- η εξίσωση A*x=B είναι ισοδύναμη με :

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

Ο πίνακας μεταθέσεων P ορίζεται από την p ως :

P[i, p(i)]=1, P[i, j]=0 εάν j ≠ p(i)

Με άλλα λόγια, είναι ο ταυτοτικός πίνακας όπου οι γραμμές μετατίθενται σύμφωνα με την μετάθεση p. Η συνάρτηση `permu2mat` χρησιμοποιείται για τον υπολογισμό του P ( `permu2mat(p)` επιστρέφει τον πίνακα P).
Είσοδος :

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

Έξοδος :

`[1,0],[[1,0],[0.75,1]],[[4.0,5.0],[0,1.25]]`

Εδώ n=2, και επομένως :

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

Επαλήθευση :
Είσοδος (όπου `A:=[[3.,5.],[4.,5.]]`) :

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

Έξοδος:

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

Να σημειωθεί ότι η μετάθεση είναι διαφορετική για ακριβή είσοδο (ως οδηγός επιλέγεται ο απλούστερος αντί για τον μεγαλύτερο σε απόλυτη τιμή).
Είσοδος :

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

Έξοδος :

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

Είσοδος :

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

Έξοδος :

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