LU ne fonctionne pas dans Scilab ?

Tout ce qui concerne notamment les outils de calcul numérique, de calcul formel ou de géométrie.
[participation réservée aux utilisateurs inscrits]
Règles du forum
Merci de soigner la rédaction de vos messages et de consulter ce sujet avant de poster. Pensez également à utiliser la fonction recherche du forum.
RGB

LU ne fonctionne pas dans Scilab ?

Message non lu par RGB »

Bonjour,

J'ai effectué des tests sur la décomposition d'une matrice A (carrée) en un produit de deux matrices triangulaires L et U. L est la matrice inférieure et U, la supérieure.

J'ai utilisé un algorithme trouvé dans l'excellent livre "Algèbre linéaire" de Grégoire Allaire et le programme a l'air de bien fonctionner.

J'ai essayé sur l'exemple suivant :

$$
A = \left[\begin{array}{ccc}
1 & 2 & 3 \\
4 & 5 & 1 \\
1.3 & 0 & 8
\end{array}\right]$$
Avec mon programme j'obtiens :
$$
L = \left[\begin{array}{ccc}
1 & 0 & 0 \\
4 & 1 & 0 \\
1.3 & 0.8667 & 1
\end{array}\right]$$
$$
U = \left[\begin{array}{ccc}
1 & 2 & 3 \\
0 & -3 & -11 \\
0 & 0 & 13.63
\end{array}\right]$$

Par contre, dans Scilab, avec l'instruction [Lp,Up] = lu(A) j'obtiens :

$$Lp = \left[\begin{array}{ccc}
0.25 & -0.4615385 & 1\\
1 & 0 & 0\\
0.325 & 1 & 0
\end{array}\right]$$

$$Up = \left[\begin{array}{ccc}
4 & 5 & 1\\
0 & -1.625 & 7.675\\
0 & 0 & 6.2923077
\end{array}\right]$$

Dans les deux cas, j'ai bien $\displaystyle L.U = L_{p}.U_{p} = A$, mais pourquoi Scilab me donne des matrices qui ne sont pas triangulaires ?!

NB :
rebouxo a écrit :Y a une petite coquille dans ton texte. Tes matrices sont triangulaires et pas diagonales.
Effectivement, merci !
Dernière modification par RGB le samedi 21 avril 2007, 10:13, modifié 2 fois.
rebouxo
Modérateur honoraire
Modérateur honoraire
Messages : 6962
Inscription : mercredi 15 février 2006, 13:18
Localisation : le havre
Contact :

Message non lu par rebouxo »

Y a une petite coquille dans ton texte. Tes matrices sont triangulaires et pas diagonales. Pour ton problème, euh je sais pas.
Tu as essayé avec un autre logiciel du même type ?

Olivier
RGB

Message non lu par RGB »

Ahem ! J'aurais dû chercher dans Google avant...

Il semble que [L,U] = lu(A) donne un résultat à quelques inversions près...

Si je tape : [Lp,Up,E] = lu(A) j'obtiens :

$$Lp = \left[\begin{array}{ccc}
1. &0. & 0 \\
0.325 & 1. & 0 \\
0.25 &-0.4615385 & 1
\end{array}\right]$$


$$Up = \left[\begin{array}{ccc}
4. & 5. & 1.\\
0. & - 1.625 & 7.675\\
0. & 0. & 6.2923077
\end{array}\right]$$

$$ E = \left[\begin{array}{ccc}
0. & 1. & 0.\\
0. & 0. & 1.\\
1. & 0. & 0. \\
\end{array}\right]$$

Où peut-on trouver les algorithmes de décomposition LU, et lequel est le meilleur ?
Il y a celui de http://www.nr.com (Numerical Recipes) qui est assez complexe...
Je viens de lire que l'algo de Scilab est basé sur les routines Lapack DGETRF...

[Edit Arnaud : déplacé dans logiciels]
Répondre