UNIVERSITE DES SCIENCES ET TECHNOLOGIES DE LILLE U.F.R. de Mathématiques Pures et Appliquées Département de Mécanique Feuille d’exercice 9 : Méthodes numériques de résolution d’un système d’équations linéaires L’objectif de ce TP numérique est d’implémenter sous Matlab les algorithmes vus en cours de résolution d’un système linéaire Partie 1 : Résolution d’un système triangulaire Implémenter sous matlab l’algorithme suivant qui permet de trouver la solution X d’un système d’équation linéaire U X = Y où U désigne une matrice triangulaire supérieure inversible, et X, Y ∈ Mn,1 (R). Pour i = n, ...1 faire : X xi = y i − Uij xj /Uii (1) (2) j>i Fin (3) On écrira une fonction qui en entrée prend une matrice triangulaire supérieure U et une matrice colonne Y et en sortie donne la solution X du système U X = Y . On testera ensuite cette fonction sur des matrices triangulaires simples dont on connaît la solution analytique. Partie 2 : Algorithme d’élimination Implémenter sous matlab l’algorithme d’élimination suivant qui permet à l’aide d’un système d’équations sous forme linéaire AX = B (avec A ∈ GLn (R) et X, B ∈ Mn,1 (R)) d’obtenir un système équivalent A(n−1) X = B (n−1) où An−1 est une matrice triangulaire supérieure. 1) Initialisation A(0) = A ∈ Mn (R) B (0) = B ∈ Mn,1 (R) 2) Itérations : pour k = 1, 2, ..., n − 1, faire (i) Elimination de l’inconnue xk (k) (k−1) (k) (k−1) Aij = Aij Aij = Aij 1 ≤ i ≤ k, (k−1) − Aik 1≤j≤n (k−1) × Akj (k−1) /Akk k < i ≤ n, k≤j≤n (ii) Modification du second membre : (k) bi (k−1) = bi (k−1) − Aik (k−1) × bkk−1 /Akk k<i≤n Fin On implémentera cet algorithme sous forme d’une fonction qui en entrée prend une matrice carrée de taille n A et une matrice colonne B et en sortie donne la matrice triangulaire supérieure inversible A(n−1) et la matrice colonne B (n−1) . On testera ensuite cette fonction sur des exemples de matrice inversible. 1 Partie 3 : Test Utiliser ces fonctions pour obtenir la solution d’un système d’équation linéaire AX = B, où A désigne une matrice inversible quelconque. En utilisant les fonctions "tic" et "toc", regarder comment évolue le temps d’inversion de la matrice en fonction de la taille de la matrice n. Tracer la fonction d’évolution. Partie 4 : Vectorialisation du calcul L’utilisation de boucles dans le language Matlab est à proscrire car elles sont très inefficaces (n’étant pas compilées). Il vaut mieux utiliser des fonctions vectorielles ou matricielles qui elles font appel à des fonctions codées en fortran et précompilées. Si l’on introduit la matrice L(k) de rang n identique à la matrice identité In à l’exception de la colonne k telle que : 1, si i=j 0, si i 6= j et j 6= k Lij = 0, si i < k et j = k (k−1) (k−1) −Aik /Akk , si i > k et j = k alors on a pour tout k < n, A(k) = L(k) A(k−1) et b(k) = L(k) b(k−1) . Utiliser cette forme matricielle pour réécrire l’algorithme d’élimination. En utilisant les fonctions "tic" et "toc", comparer le temps de calcul sous matlab avec l’algorithme vectorialisé et l’algorithme en boucle. 2