Ce document de Travaux Pratiques (TP 05) est destiné aux étudiants de 2ème année Génie Électrique, dans le cadre du module "Méthodes Numériques" à l'Université de Ghardaïa.
Il vise à les initier et les guider dans la résolution numérique de systèmes d'équations linéaires en utilisant la décomposition LU. Ce TP aborde notamment :
- La théorie et l'application de la décomposition LU.
- Les algorithmes de descente et remontée triangulaires.
- Le développement de codes Matlab pour la résolution de systèmes.
TP 05 : Systèmes d'équations linéaires (LU)
Ce document est un support de Travaux Pratiques (TP) de méthodes numériques, axé sur la résolution de systèmes d'équations linéaires en utilisant la décomposition LU.
But du TP
L'objectif de ce TP est l'implémentation d'un code Matlab pour résoudre un système d'équations linéaires en utilisant la décomposition LU.
1. Préambule
Soit à résoudre le système linéaire suivant :
2x₁ + 2x₂ - 3x₃ + 3x₄ = -12
4x₁ + x₂ - 7x₃ + 7x₄ = -22
-4x₁ - 13x₂ + 2x₃ - x₄ = 24
4x₁ + 13x₂ - 7x₃ + 14x₄ = -60
a. Vérification de la solution unique
Vérifier que le système admet une solution unique en calculant le déterminant de la matrice associée (A) à l'aide de la fonction Matlab det(). Si le déterminant est non nul, le système possède une unique solution.
b. Calcul de la solution avec Matlab
Calculer la solution du système en utilisant la fonction Matlab inv() (pour l'inverse de la matrice) ou, de préférence, l'opérateur de division gauche \ (backslash) qui est plus stable et efficace numériquement.
2. Décomposition LU
Pour résoudre le système Ax=b, on décompose la matrice A en un produit de deux matrices L et U. La matrice L est triangulaire inférieure, dont les éléments de la diagonale sont tous égaux à un, et U est triangulaire supérieure. On trouve la solution du système intermédiaire Ly=b par descente triangulaire, puis on calcule la solution de Ux=y par remontée triangulaire. Pour réaliser le script sous Matlab, on suit les étapes suivantes :
a. Fonction de décomposition LU (dcplu)
Écrire une fonction nommée dcplu qui reçoit en argument une matrice M et qui renvoie les deux matrices L et U de sa décomposition LU.
dcplu
U ← 0;
L ← I_n (matrice identité de dimension n)
pour i = 1 → n faire
pour j = 1 → n faire
si j < i alors
L_ij ← (M_ij - somme(k=1 à j-1) L_ik × U_kj) / U_jj
sinon
U_ij ← M_ij - somme(k=1 à i-1) L_ik × U_kj
fin si
fin pour
fin pour
retourner L et U
b. Fonction de descente triangulaire (dtri)
Écrire une fonction nommée dtri qui reçoit en argument la matrice augmentée formée par L et le second membre b, et qui renvoie la solution y obtenue par descente triangulaire.
dtri
Obtenir la dimension n×m de M
pour i = 1 → n faire
pour j = 1 → i-1 faire
M_im ← M_im - M_ij × SOL(j)
fin pour
Sol(i) ← M_im / M_ii
fin pour
retourner SOL
c. Fonction de remontée triangulaire (rtri)
Écrire une fonction nommée rtri qui reçoit en argument la matrice augmentée formée par U et le second membre y, et qui renvoie la solution x obtenue par remontée triangulaire.
La fonction rtri a déjà été utilisée avec la méthode de Gauss sous l'appellation soltri. Son principe est similaire à la descente triangulaire mais pour une matrice supérieure.
d. Lecture des données
Dans le script principal, on doit lire la matrice A et le vecteur b du système.
e. Résolution du système
Appeler les fonctions précédentes (dcplu, dtri, rtri) pour résoudre le système donné en utilisant la décomposition LU.
Foire Aux Questions (FAQ)
Pourquoi utiliser la décomposition LU pour résoudre un système linéaire ?
La décomposition LU est particulièrement utile lorsque l'on doit résoudre le même système linéaire (Ax=b) avec plusieurs vecteurs b différents. Une fois que la matrice A est décomposée en L et U, la résolution pour chaque nouveau b est beaucoup plus rapide car elle implique seulement des substitutions avant et arrière (descente et remontée triangulaire), évitant la coûteuse inversion de matrice à chaque fois.
Quelle est la différence entre la division gauche (\) et l'inverse (inv()) en Matlab ?
En Matlab, l'opérateur de division gauche A\b résout le système linéaire Ax=b directement et de manière numériquement stable. Il utilise des algorithmes optimisés (comme la décomposition LU ou QR) sans calculer explicitement l'inverse de A. L'utilisation de inv(A)*b est généralement moins précise et plus lente pour résoudre des systèmes linéaires, car le calcul explicite de l'inverse peut introduire des erreurs d'arrondi et est plus coûteux en termes de calcul.
Qu'est-ce que la descente et la remontée triangulaire ?
La descente triangulaire (ou substitution avant) est une méthode de résolution pour un système linéaire Ly=b où L est une matrice triangulaire inférieure. On commence par résoudre pour la première variable (y₁) et on substitue sa valeur dans les équations suivantes. La remontée triangulaire (ou substitution arrière) est similaire mais s'applique à un système Ux=y où U est une matrice triangulaire supérieure. On commence par résoudre pour la dernière variable (xₙ) et on remonte progressivement pour trouver les autres variables.