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

Un livre de Wikibooks.

Octave
L'étagère Informatique
et
Mathématiques.
Octave
Sommaire
Bibliographie
Autres cours
Modifier ce modèle

Durant ce chapitre, nous utiliserons comme exemple la résolution du système suivant:

\left\{\begin{matrix} 2x_1+3x_2-x_3=-1  \\ x_1 - x_2 + 3x_3 = 4 \\2x_1-3x_2+x_3=3 \end{matrix}\right.

ou, sous forme matricielle:

A \cdot x = b \;

Sections

[modifier] Définir un vecteur

Nous voulons définir le vecteur: b =\begin{pmatrix}-1 \\ 4 \\ 3\end{pmatrix}

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 resultat.

[modifier] Définir une matrice

Pour définir une matrice, on procède comme pour le vecteur:

octave> A = [2 3 -1; 1 -1  3; 2 -1 3]
A =
  
  2   3  -1
  1  -1   3
  2  -1   3

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

[modifier] Résoudre le système

L'opérateur habituel pour résoudre un sytème linéaire est "\" :

octave> x = A\b
x =
 
 -1
  1
  2

On peut verifier que A \cdot x = b :

octave> b2 = A*x
b2 =

 -1
  4
  3

[modifier] Décomposition LU

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

[modifier] Décomposition de Cholesky

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 A = R^{T}R \;

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