Programmation Octave/Résoudre un Système d'équations linéaires

Un livre de Wikilivres.

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