Programmation Octave/Résoudre un Système d'équations linéaires
Durant ce chapitre, nous utiliserons comme exemple la résolution du système suivant :
ou, sous forme matricielle:
Définir un vecteur
[modifier | modifier le wikicode]Nous voulons définir le vecteur :
Pour cela il faut entrer:
octave> b = [-1 ; 4 ; 3] b = -1 4 3
ou
octave> b = [-1 4 3]' b = -1 4 3
L'opérateur " ' " transpose un vecteur ou une matrice, on crée un vecteur ligne et on le transpose. Il faut noter qu'on peut aussi définir un vecteur par une suite :
octave:> x = 1:4 x = 1 2 3 4 octave> y = 10:-2:4 y = 10 8 6 4
Et, si on ajoute ";" à la fin de la ligne, Octave n'affiche pas le résultat.
Définir une matrice
[modifier | modifier le wikicode]Pour définir une matrice, on procède comme pour le vecteur :
octave> A = [2 3 -1; 1 -1 3; 2 -3 1] A = 2 3 -1 1 -1 3 2 -3 1
On peut aussi modifier une matrice ou un vecteur composante par composante :
octave> A(2,2) = -10 A = 2 3 -1 1 -10 3 2 -1 3
Résoudre le système
[modifier | modifier le wikicode]L'opérateur habituel pour résoudre un système linéaire est "\" :
octave> x = A\b x = 0.5000 -0.3125 1.0625
On peut verifier que :
octave> b2 = A*x b2 = -1 4 3
Décomposition LU
[modifier | modifier le wikicode]Avant de résoudre le système, on peut décomposer la matrice avec la décomposition LU :
octave> [L,U]= lu(A) L = 1.00000 0.00000 0.00000 0.50000 0.62500 1.00000 1.00000 1.00000 0.00000 U = 2 3 -1 0 -4 4 0 0 1
puis :
octave> y = L\b y = -1 4 2 octave> x = U\y x = -1 1 2
Décomposition de Cholesky
[modifier | modifier le wikicode]Nous pouvons aussi résoudre des systèmes linéaire avec la décomposition de Cholesky obtenue par la fonction "chol(A)" si la matrice du système est symétrique définie positive :
octave> A = [2 -1 0 0;-1 2 -1 0;0 -1 2 -1;0 0 -1 2] A = 2 -1 0 0 -1 2 -1 0 0 -1 2 -1 0 0 -1 2 octave> R = chol(A) R = 1.41421 -0.70711 0.00000 0.00000 0.00000 1.22474 -0.81650 0.00000 0.00000 0.00000 1.15470 -0.86603 0.00000 0.00000 0.00000 1.11803 Upper Triangular
On peut vérifier que
octave> B = R'*R B = 2.00000 -1.00000 0.00000 0.00000 -1.00000 2.00000 -1.00000 0.00000 0.00000 -1.00000 2.00000 -1.00000 0.00000 0.00000 -1.00000 2.00000
Puis on résout le système :
octave>b = [1 -1 1 -1]' octave> y = R'\b; octave> x = R\y x = 0.40000 -0.20000 0.20000 -0.40000
Enfin on vérifie le calcul :
octave> z = A*x z = 1.0000 -1.0000 1.0000 -1.0000