Université Sidi Mohamed Ben Abdallah Faculté des Sciences Dhar El Mahraz Fès Département d’Informatique

Résolution des Systèmes Linéaires par la méthode du Pivot total de Gauss
Sous Matlab

Réalisé par : WARME Moumouni Etudiant en Master I Filière : Master Qualité Logiciel Année Universitaire 2010-2011

...... D......... b................................................................................................................................................................La méthode du Pivot total de Gauss Table des matières W.......................................................................................... 5 Description de l'algorithme ....................................................................................................................... 7 La fonction de décomposition ................................................ Les Systèmes Linéaires ................................. 5 Stratégie de choix du pivot ........ a................... 1................................................. 1..............................Moumouni Introduction......................................................................................... 3 Les méthodes directes................................................................. 5 Présentation de l’algorithme .............. 2.. 9 Présentation du programme sous MatLab........... 11 Test du le programme en Matlab ........... 3 A.......... 12 Conclusion ............................................ B.................. 4 Résolution des systèmes triangulaires ...... 14 2 .... 7 La fonction de choix du pivot et de permutation .................................................................................... 9 Le code sous Matlab de la fonction de décomposition .......................... 4 Méthode d'élimination de Gauss et décomposition LU........................................ 1.......................................................... 1.......................................................................... 3 Les notions générales ......................................................................................................... ................................................. 10 Le code sous Matlab de la fonction de montée plus le programme ....................................................................................... 2.................. 2................................... C................................................................................. 3............................................................ 3......... 8 La fonction de la méthode de montée .................................................. 9 Le code sous Matlab de la fonction de choix du pivot et de permutation ............................. 2................

est le vecteur des inconnues du système. le calcul de chaque déterminant par la formule suivante: (où la somme est étendue à toutes les permutations sur n objets) requiert n! flops. Cependant l'application de cette formule est inacceptable pour la résolution pratique des systèmes. sur un ordinateur effectuant 10 flops par seconde il faudrait 9. En fait. 9 47 Par exemple. Où A = (aij). Avant de commencer nous allons faire un rappel sur les systèmes linéaires. Les méthodes de cette résolution étant nombreuses. Les notions générales On appelle système linéaire d'ordre n (n entier positif). La relation précédente équivaut aux équations La matrice A est dite régulière (ou non singulière) si detA≠ 0 .La méthode du Pivot total de Gauss W. Théoriquement. 1 ≤ i. nous ont poussé à étudier une seule méthode en particulier celle du pivot total de Gauss.Moumouni Introduction La résolution de systèmes linéaires peut être effectuée par plusieurs méthodes.6 10 années pour résoudre un système linéaire de seulement 50 équations. b=(bi).1 ≤ i ≤ n. A. une expression de la forme Ax = b. 1 ≤ i ≤ n. Les Systèmes Linéaires 1. afin de fournir un algorithme de résolution et implémenter cet algorithme sous Matlab pour en faire une application. un vecteur colonne réel ou complexe et x = (xi). car son coût est de l'ordre de (n + 1)! floating-point opérations (flops : opération avec des virgules). 3 . désigne une matrice de taille n x n de nombres réels ou complexes. si A est non singulière. Ainsi le choix d’une des méthodes rend cette résolution plus ou moins complexe par rapport au choix d’autres méthodes. Il faut donc développer des algorithmes alternatifs avec un coût raisonnable. on a existence et unicité de la solution x (pour n'importe quel vecteur b donné) si et seulement si la matrice associée au système linéaire est régulière. Sans oublier que la solution choisie peut donnée une solution qui s’approche ou s’écarte de la solution exacte. la solution est donnée par la formule de Cramer : où Ai est la matrice obtenue en replaçant la i-ème colonne de A par le vecteur b. j ≤ n.

. Pour résoudre Ax = b.n. nous éviterons de les aborder. le système à résoudre est dit système triangulaire supérieur ou inférieur. donnerait la solution en un nombre fini d'opérations. on en déduit Cet algorithme est appelé méthode de descente. Si A est triangulaire supérieure on a : Cet algorithme est appelé méthode de remontée. Les méthodes directes On appelle méthode de résolution directe d'un système linéaire un algorithme qui. Résolution des systèmes triangulaires Une matrice A = (aij) est triangulaire supérieure quand aij = 0 pour i>j et triangulaire inférieure si aij = 0 pour i<j . Mais ces méthodes n’étant l’objet de notre présent projet. on cherche à écrire A = LU où .Suivant ces cas.….U est une matrice triangulaire supérieure. Il existe aussi des méthodes itératives qui consistent à construire une suite de vecteurs xn convergeant vers la solution x. . si l'ordinateur faisait des calculs exacts. La résolution de Ax = b est alors ramenée aux résolutions successives des systèmes échelonnés Ly = b et Ux = y.Moumouni 2.La méthode du Pivot total de Gauss W. pour tout i = 1.L est une matrice triangulaire inférieure avec des 1 sur la diagonale. a. 4 . Si A est triangulaire inférieure on a : πaii.elle a comme déterminant det(A) = que aii ≠ 0. Si la matrice A est régulière et triangulaire alors.

qui ne changent pas. +4 On transforme donc la deuxième ligne par : L2-10 L1.005. soient non nuls. (k) (k+1) (k) En fait. 1/3 = 0. L'algorithme de Gauss est le suivant : (1) (1) On pose A = A. pour k = 1. j = 1. Dans l'exemple (S) et selon "la stratégie simple" on prend pour pivot a1. 2. Le calcul exact est 5 . W.1 = 1. Comme dans +1 pi ~ 0.995 et 1.00x10 .314x10 .00 il faut remarquer que les deux 0 sont significatifs et que 1. comme le montre l'exemple suivant : On suppose que la machine fonctionne avec 3 chiffres significatifs en virgules flottantes Par exemple 0. Parlant de pivot nous devons bien choisir celui-ci pour que les solutions soient exactes. n . Remarque : (k) Pour que l'algorithme de Gauss puisse terminer. Dans 1. Remarque : Une autre convention souvent utilisée est l'écriture commençante par 0. Stratégie de choix du pivot Que se passe-t-il si on adopte la stratégie "simple" consistant à choisir le premier coefficient rencontré dans la colonne considérée.1 si a1. Rappelons que les calculateurs utilisent le signe « .00 est l'écriture approchée de tout nombre strictement compris entre 0.. » plutôt que la virgule de la tradition française pour séparer les entiers des -4 décimales. il faut que tous les termes a kk .33333… sont convertis respectivement en : valeurs approchées sauf la première qui se trouve être exacte. pi= 3:14159…. Description de l'algorithme La méthode consiste à rendre la matrice A soit une matrice triangulaire supérieure.n on calcule A la fin de ce procédé. Soit A = (aij) une matrice non singulière nxn.…. pour passer de A à A on modifie touts les éléments de A sauf les premières k lignes et les premières k colonnes. les éléments de la matrice U (triangulaire supérieure) sont définis par tandis que les éléments de la matrice L (triangulaire inférieure) sont les termes lij engendrés par l'algorithme de Gauss.La méthode du Pivot total de Gauss b. qui correspondent (k) aux termes diagonaux u kk de la matrice U et qu'on appelle pivots.…. c'est-à-dire aij = aij pour i.1 ≠ 0 ? Cela peut donner lieu à de grandes erreurs d'arrondi. Méthode d'élimination de Gauss et décomposition LU.0001. par exemple a1.Moumouni 1.

0001.5 ×10 devient du même ordre de grandeur que les solutions. parmi toutes les paires d'indices (i.00010001… ~1.1 est le plus élevé possible. Notre exemple de mauvais choix de pivot a1. le choix simple de pivot à chaque étape est souvent numériquement acceptable et donne alors lieu à une factorisation de la matrice A en produit de matrices triangulaires. (k-1) La méthode du pivot total. Même si à l'issue de la (k-1) étape on trouve on vient de voir qu'il est préférable de choisir un autre pivot. et l'erreur sur y dans le calcul approche de la deuxième équation se trouve -3 multipliée par 10000 : l'erreur d'arrondi qui peut aller initialement jusqu' à 0. mais un vecteur obtenu en permutant les coordonnées de u.1 = 1.9999 = 1. consiste à utiliser le plus grand des coefficients a i. ce qui mène à des échanges de lignes et de colonnes. on divise par un petit pivot 0. La méthode est plus précise mais plus coûteuse en temps.k.y = 0 donc la solution trouvée est x=0. Si au contraire.Moumouni mais la machine prend la version arrondie : et la résolution du système triangulaire obtenu est alors : y = 1 puis 0. j). (k-1) ième La stratégie du pivot partiel consiste 0 choisir a i.k avec i ≥ k de module maximum dans la k colonne de la matrice A. De plus.1/a1. pivot partiel. Après avoir expliqué les différentes méthodes et leur faiblesse nous allons nous intéresser à la méthode du pivot total qui est une méthode plus précise que les autres. ce qui est correct à 10 près.1 d’écrit un cas particulièrement défavorable où le rapport a2. on échange les lignes et on choisit pour pivot a2.y = 1. Pour une matrice assez générale. la résolution donne le Système triangulaire : -3 D'ou y = 1 et cette fois x = 2 . Ainsi nous allons donner un algorithme informatique permettant la résolution de systèmes linéaire par cette méthode et en suite implémenter cet algorithme sous Matlab. de la même façon qu'on a permute les colonnes.0001x = 1 .00 Explication : Lorsqu'on calcule x dans la première équation 0:0001x = 1 y = 0. 6 . il faut prendre garde au fait que la solution du système transformé n'est pas u.y=1 ce qui est très éloignée de la solution exacte tirée de (S1) : x = 1/0.La méthode du Pivot total de Gauss W. Conclusion : ième Pivot total.

La fonction de choix du pivot et de permutation Voici l’algorithme de cette fonction. et pivot_sol après permutation.j)).j). Rappelons brièvement cette méthode qui consiste à : 1. Si pivo≠0 alors (*Permutation des lignes de la matrice A si le pivot est différent de zéro et est le plus grand*) Pour j=K à n faire temp:=A(k. qui reçoit en paramètre la matrice carrée A. fsi. (*Permutation des colonnes de la matrice A si le pivot est différent de zéro et est le plus grand*) Pour i=K à n faire 7 . b(k):=b(io).j):=temp.b. m:=lireNbreColonne(A). 4. la matrice colonne b et la matrice colonne pivot_sol qui à pour rôle de donner l’ordre des solutions. Appliquer la méthode de la montée ou descente en fonction du type de la matrice A obtenu dans l’étape ci-dessus pour avoir la résolution. 1. Présentation de l’algorithme L’analyse des différentes méthodes permettant de mieux comprendre la méthode du pivot total. Ces différentes étapes nous amènent à penser à scinder la résolution en fonctions qui vont interagir pour résoudre un système donné. fonction [A. fait.jo:=j.j))>pivo faire (*Indexation du numéro de ligne et de colonne du pivot*) pivo:=abs(A(i. fait. (*Lecture du nombre de ligne de la matrice*). b(io):=temp. Choisir le pivot le plus grand dans toute la matrice A 2.La méthode du Pivot total de Gauss W. (*Choix du pivot le plus grand dans la matrice A*) Pour i=k à n faire Pour j=k à n faire Si abs(A(i. Mettre en ordre les solutions en fonction des permutations de colonnes effectuée. io:=i.Moumouni B.j):=A(io. Cette fonction renvoie comme résultat les matrices A. fait. dans les cas où le système initial à des pivots très petits. A(io.j). puisque celle-ci n’intervient et est plus précise que les autres méthodes. (*Lecture du nombre de colonne de la matrice*). Rendre la matrice A triangulaire supérieure ou inférieure dans notre cas triangulaire supérieur. 5. Effectuer des permutations de lignes ou de colonnes en fonction de la localisation du meilleur pivot (plus grand). Ensuite nous présenterons les implémentations sous Matlab après. 3.pivot_sol) Debut n:=lireNbreLigne(A). Nous allons détailler l’algorithme de ces fonctions. Pour k=1 à n-1 faire pivo:=0. fait (*Permutation des colonnes pour la matrice b*) temp:=b(k). (*Initialisation de l'ordre des solutions*) Pour i=1 à n faire pivot_sol(i):=i.pivot_sol] :=permut(A. A(k.b. b.

A(i. Pour k=1 à n-1 faire pivot:=A(k. fait. Si pivot≠0 alors Pour i=k+1 à n faire b(i)=b(i)-(A(i.b) Debut n:=lireNbreLigne(A). Si A(k. La fonction de décomposition Elle retourne comme résultat la matrice A en une matrice triangulaire supérieure L’algorithme de cette fonction est la suivante : fonction [A.k)==0 alors Afficher ('Un pivot nul ! => méthode de Gauss pivot total non applicable').(*Lecture du nombre de ligne de la matrice*).j) :=0. fsi. m:=lireNbreColonne(A). fait fait (*Mettre à Zero les elements qui doivent etre des zéro*) Pour i=1 à n faire Pour j=1 à n faire Si(i>j) alors A(i. A(i. W. fait fait fait Fin 8 .j)-(A(i. fait. Pour j=k+1 à n faire A(i. pivot_sol(jo):=temps.k). fsi. Fin 2.j). fait. pivot_sol(k):=pivot_sol(jo).k). fait fait Sinon Afficher('pivot null').k):=A(i. Si pivo#0 alors (*La sortie de la grande boucle pour éviter plusieurs permutations incohérent avec le principe du pivot total*) fin boucle.La méthode du Pivot total de Gauss temp:=A(i.j):=A(i.(*Lecture du nombre de colonne de la matrice*).k)/pivot)*A(k.Moumouni (*Actualisation de l'ordre des solutions avec le nouvelle ordre après permutation des colonnes de la matrice A*) temps:=pivot_sol(k).b] :=triang(A.jo):=temp.jo).k)/pivot)*b(k).

end end % // Mettre à Zero les elements qui doivent etre des zéro for i=1:n for j=1:n if(i>j)A(i.k)/pivot)*b(k).k). for j=k+1:n A(i.m]=size(A).j)=0. La fonction de la méthode de montée Cette fonction est intégrée dans la fonction globale de résolution. Le code sous Matlab de la fonction de décomposition function [A. fonction x :=montee(A.k)/pivot)*A(k. end end end end 9 .j)=A(i.b) Début (*Calcul de xn*) W.Moumouni x(pivot_sol(n)):=b(n)/A(n. Présentation du programme sous MatLab Dans Matlab les fonctions sont dans des fichiers nous allons donc présenter le contenu de ces fichiers. Pour j=i+1 à n faire s:=(s+A(i.j). fait Fin Toute ces fonction interagir dans une fonction globale pour permettre la résolution de système linéaire.j)*(x(pivot_sol(j)))). for k=1:n-1 pivot=A(k.n).b) [n. Pour i=n-1 à :1 s:=0. C. 1. fait (*Calcul des xi*) x(pivot_sol(i)):=((b(i)-s)/A(i. end end elseif disp('pivot null').b]=triang(A.i)).La méthode du Pivot total de Gauss 3.j)(A(i. if pivot~=0 for i=k+1:n b(i)=b(i)-(A(i.

end end 10 .j)). b(k)=b(io).:)=A(io. %Permutation des colonnes de la matrice A si le pivot %est différent de zéro et est le plus grand temp=A(:. jo=j. Le code sous Matlab de la fonction de choix du pivot et de permutation function [A. A(k.:).pivot_sol) [n.b. end end end if pivo~=0 %Permutation des lignes de la matrice A si le pivot est différent %de zéro et est le plus grand temp=A(k.b.jo) .jo)=temp. A(:. end %Actualisation de l'ordre des solution avec le nouvelle ordre après %permutation des colonnes de la matrice A temps=pivot_sol(k). end if pivo~=0 %La sortie de la grande boucle pour éviter plusieurs %permutations incohérent avec le principe du pivot total break. b(io)=temp.pivot_sol]=permut(A. %Choix du pivot le plus grand dans la matrice A for i=k:n for j=k:n if(abs(A(i. end for k=1:n-1 pivo=0.:)=temp. io=i. %Permutation des colonnes pour la matrice b temp=b(k).m]=size(A). A(io.k). pivot_sol(jo)=temps.La méthode du Pivot total de Gauss W. A(:.k)==0 disp('Un pivot nul ! => methode de Gauss pivot total non applicable'). pivot_sol(k)=pivot_sol(jo). %Initialisation de l'ordre des solutions for i=1:n pivot_sol(i)=i. if A(k.k)=A(:.Moumouni 2.j))>pivo) pivo=abs(A(i.:).

end disp('Solution en ordre indication de l''ordre par sol_ordre').'%10.b. end x(pivot_sol(i))=((b(i)-s)/A(i. %Résolution par la methode de la montée %Car la matrice A est une matrice triangulaire supérieur x(pivot_sol(n))=b(n)/A(n. if n==m if c==n pivot_sol=0. end elseif n~=m disp('=>>>>>La matrice n est pas carrée ').b) [l. A disp(' '). for j=i+1:n s=(s+A(i. end end 11 .j)*(x(pivot_sol(j)))). for i=1:n disp(['X' num2str(pivot_sol(i)) '=' num2str(x(i). disp('Solution en désordre indication de l''ordre par pivot_sol').pivot_sol). for i=1:n sol_ordre(pivot_sol(i))=y(i). end elseif c~=n disp('=>>>>>La matrice b n ''est pas correcte '). [n. %Presentation de la matrice A triangulaire supérieure disp('Matrice A triangulaire supérieure'). end y=x.i)).4f')]). for i=n-1:-1:1 s=0. %triangularisation [A.b]=triang(A. disp('=>>>>>Veuillez saisir une matrice carrée '). for i=1:n disp(['X' num2str(i) '=' num2str(sol_ordre(i).La méthode du Pivot total de Gauss W.Moumouni 3.b. end disp(' '). Le code sous Matlab de la fonction de montée plus le programme Dans ce code il y a l’interaction des différentes fonctions définies plus haut.c]=size(b).4f')]). %Choix du pivot maximun et Permutation des lignes et colonnes [A.b). function y=gauss_total(A.n). disp('=>>>>>Veuillez saisir une matrice b avec le nombre de colonne égal au nombre de ligne de la matrice A ').m]=size(A).'%10.pivot_sol]=permut(A.

Test 1 : Par exemple pour le système d'équations Ax=b suivant: 1 2 A= 4 2 4 4 8 16 31 61 b= 31 61 120 236 464 8 16 8 16 31 8 16 31 61 120 16 31 61 120 236 La solution exacte est x = ( 1 . 1 .8 16 31 61 120 . Test du le programme en Matlab Après avoir écrit le programme.2 4 8 16 31. 1 . 1 . 1) Voici les matrice que nous allons saisir dans Matlab : A=[1 2 4 8 16.4 8 16 31 61.16 31 61 120 236 ] b=[31 61 120 236 464] Ensuite nous allons appelé la fonction gauss_total(A.b).Moumouni D. nous allons effectuer un test qui consiste à entrer un système d’équation Ax=b et relever le résultat donné par le programme afin de faire une comparaison avec la solution exacte.La méthode du Pivot total de Gauss W. 12 .

La méthode du Pivot total de Gauss L’appelle de la fonction gauss_total(A. Pour bien voire que le programme remet les résultats en ordre en fonction des permutations de colonnes nous allons prendre un autre exemple.b) et affichage des solutions : W. Nous constatons aussi que le résultat est exacte quant à l’ordre des solutions il n’y a pas grand-chose puis que les résultats sont tous égaux à 1.Moumouni A travers le résultat on constate bien qu’il y a eu une permutation de colonnes et de ligne. Test 2: Soit le système d’équation suivant Ax=b comme suit : 4 A= 3 2 8 8 12 13 4 b= 5 11 9 18 13 .Car la dernière ligne a été permutée avec la première ligne et la dernière colonne avec la première. ceci est montré par la matrice A triangulaire supérieure .

14 .6. de donner un programme qui rassemble tout les méthodes de résolution de systèmes linéaires.La méthode du Pivot total de Gauss W.Moumouni Dans cette capture qui suit on voit très bien que le programme garde l’ordre des solutions même avec les permutations de colonnes.0 de l’année 2008. et d’autre part une familiarisation avec l’outil de programmation mathématique MatLab version 7. Ce qui nous a permis d’une part de bien maitriser les algorithmes de cette méthode de résolution. ce qui nous permettrait de comparer les différentes solutions et de voir exactement les erreurs introduites par certaines méthodes. Conclusion Nous sommes maintenant arrivés au terme de notre projet dont nous allons donner un bref bilan par rapport aux objectifs que visaient celui-ci. Sans oublier qu’il serait très intéressant. Ce projet avait pour but de réaliser la méthode du pivot total de Gauss pour la résolution des systèmes linéaires.

Master your semester with Scribd & The New York Times

Special offer for students: Only $4.99/month.

Master your semester with Scribd & The New York Times

Cancel anytime.