Résolution d’un système triangulaire
Considérons un système inversible \(3 \times 3\) triangulaire inférieur :
La matrice étant inversible, ses termes diagonaux \(l_{i i}, i=1,2,3\) sont non nuls. On peut donc déterminer successivement les valeurs inconnues \(x_i\) pour \(i=1,2,3\) :
Cet algorithme peut être étendu aux systèmes \(n \times n\). On l’appelle substitution directe.
2. Exemples
2.1. Résolution d’un système à l’aide d’une matrice triangulaire inférieure
Considérons le système d’équations suivant :
Ce système peut être représenté sous la forme matricielle \(Ax = b\) où
et
Pour résoudre ce système avec une matrice triangulaire inférieure, nous utiliserions les formules de descente.
2.2. Exemple pratique en Python :
Vous pouvez utiliser la bibliothèque numpy pour résoudre ce système :
import numpy as np
def forward_substitution(L, b):
n = len(b)
x = np.zeros(n)
for i in range(n):
x[i] = b[i]
for j in range(i):
x[i] -= L[i, j] * x[j]
x[i] /= L[i, i]
return x
# Définir la matrice L (triangulaire inférieure) et le vecteur b
L = np.array([[2, 0, 0], [3, 5, 0], [1, 2, 4]])
b = np.array([4, 1, 2])
x = forward_substitution(L, b)
print(x)
print("A x close to b ? ", np.allclose(np.dot(L, x), b) )
Results
[ 2. -1. 0.5] A x close to b ? True
Substitution rétrograde (backward substitution) :
Pour résoudre des systèmes d’équations avec des matrices triangulaires supérieures, utilisez la méthode suivante :
import numpy as np
def backward_substitution(U, b):
n = len(b)
x = np.zeros(n)
for i in range(n-1, -1, -1):
x[i] = b[i]
for j in range(i+1, n):
x[i] -= U[i, j] * x[j]
x[i] /= U[i, i]
return x
# Définir la matrice U (triangulaire supérieure) et le vecteur b
U = np.array([[2, 3, 1], [0, 5, 2], [0, 0, 4]])
b = np.array([4, 1, 2])
x = backward_substitution(U, b)
print(x)
print("A x close to b ? ", np.allclose(np.dot(U, x), b) )
Results
[1.75 0. 0.5 ] A x close to b ? True