Vous êtes sur la page 1sur 14

Universit Sidi Mohamed Ben Abdallah Facult des Sciences Dhar El Mahraz Fs Dpartement dInformatique

Rsolution des Systmes Linaires par la mthode du Pivot total de Gauss


Sous Matlab

Ralis par : WARME Moumouni Etudiant en Master I Filire : Master Qualit Logiciel Anne Universitaire 2010-2011

La mthode du Pivot total de Gauss


Table des matires

W.Moumouni

Introduction............................................................................................................................................. 3 A. 1. 2. a. b. 1. 2. B. 1. 2. 3. C. 1. 2. 3. D. Les Systmes Linaires .................................................................................................................... 3 Les notions gnrales .................................................................................................................. 3 Les mthodes directes................................................................................................................. 4 Rsolution des systmes triangulaires .................................................................................... 4 Mthode d'limination de Gauss et dcomposition LU. ........................................................ 5 Description de l'algorithme ................................................................................................. 5 Stratgie de choix du pivot .................................................................................................. 5

Prsentation de lalgorithme ........................................................................................................... 7 La fonction de choix du pivot et de permutation ........................................................................ 7 La fonction de dcomposition ..................................................................................................... 8 La fonction de la mthode de monte ........................................................................................ 9 Prsentation du programme sous MatLab...................................................................................... 9 Le code sous Matlab de la fonction de dcomposition ............................................................... 9 Le code sous Matlab de la fonction de choix du pivot et de permutation ............................... 10 Le code sous Matlab de la fonction de monte plus le programme ......................................... 11 Test du le programme en Matlab .................................................................................................. 12

Conclusion ............................................................................................................................................. 14

La mthode du Pivot total de Gauss

W.Moumouni

Introduction
La rsolution de systmes linaires peut tre effectue par plusieurs mthodes. Ainsi le choix dune des mthodes rend cette rsolution plus ou moins complexe par rapport au choix dautres mthodes. Sans oublier que la solution choisie peut donne une solution qui sapproche ou scarte de la solution exacte. Les mthodes de cette rsolution tant nombreuses, nous ont pouss tudier une seule mthode en particulier celle du pivot total de Gauss, afin de fournir un algorithme de rsolution et implmenter cet algorithme sous Matlab pour en faire une application. Avant de commencer nous allons faire un rappel sur les systmes linaires.

A. Les Systmes Linaires


1. Les notions gnrales
On appelle systme linaire d'ordre n (n entier positif), une expression de la forme Ax = b; O A = (aij), 1 i; j n, dsigne une matrice de taille n x n de nombres rels ou complexes, b=(bi),1 i n, un vecteur colonne rel ou complexe et x = (xi), 1 i n, est le vecteur des inconnues du systme. La relation prcdente quivaut aux quations

La matrice A est dite rgulire (ou non singulire) si detA 0 ; on a existence et unicit de la solution x (pour n'importe quel vecteur b donn) si et seulement si la matrice associe au systme linaire est rgulire. Thoriquement, si A est non singulire, la solution est donne par la formule de Cramer :

o Ai est la matrice obtenue en replaant la i-me colonne de A par le vecteur b. Cependant l'application de cette formule est inacceptable pour la rsolution pratique des systmes, car son cot est de l'ordre de (n + 1)! floating-point oprations (flops : opration avec des virgules). En fait, le calcul de chaque dterminant par la formule suivante:

(o la somme est tendue toutes les permutations sur n objets) requiert n! flops. 9 47 Par exemple, sur un ordinateur effectuant 10 flops par seconde il faudrait 9,6 10 annes pour rsoudre un systme linaire de seulement 50 quations. Il faut donc dvelopper des algorithmes alternatifs avec un cot raisonnable.

La mthode du Pivot total de Gauss

W.Moumouni

2.

Les mthodes directes

On appelle mthode de rsolution directe d'un systme linaire un algorithme qui, si l'ordinateur faisait des calculs exacts, donnerait la solution en un nombre fini d'oprations. Il existe aussi des mthodes itratives qui consistent construire une suite de vecteurs xn convergeant vers la solution x. Mais ces mthodes ntant lobjet de notre prsent projet, nous viterons de les aborder. Pour rsoudre Ax = b, on cherche crire A = LU o - L est une matrice triangulaire infrieure avec des 1 sur la diagonale, - U est une matrice triangulaire suprieure. La rsolution de Ax = b est alors ramene aux rsolutions successives des systmes chelonns Ly = b et Ux = y.

a. Rsolution des systmes triangulaires Une matrice A = (aij) est triangulaire suprieure quand aij = 0 pour i>j et triangulaire infrieure si aij = 0 pour i<j .Suivant ces cas, le systme rsoudre est dit systme triangulaire suprieur ou infrieur. Si la matrice A est rgulire et triangulaire alors,elle a comme dterminant det(A) = que aii 0, pour tout i = 1,.,n. Si A est triangulaire infrieure on a :

aii, on en dduit

Cet algorithme est appel mthode de descente. Si A est triangulaire suprieure on a :

Cet algorithme est appel mthode de remonte.

La mthode du Pivot total de Gauss


b. Mthode d'limination de Gauss et dcomposition LU.

W.Moumouni

1. Description de l'algorithme La mthode consiste rendre la matrice A soit une matrice triangulaire suprieure. Soit A = (aij) une matrice non singulire nxn. L'algorithme de Gauss est le suivant : (1) (1) On pose A = A, c'est--dire aij = aij pour i, j = 1,, n ; pour k = 1,,n on calcule

A la fin de ce procd, les lments de la matrice U (triangulaire suprieure) sont dfinis par

tandis que les lments de la matrice L (triangulaire infrieure) sont les termes lij engendrs par l'algorithme de Gauss. (k) (k+1) (k) En fait, pour passer de A A on modifie touts les lments de A sauf les premires k lignes et les premires k colonnes, qui ne changent pas. Remarque : (k) Pour que l'algorithme de Gauss puisse terminer, il faut que tous les termes a kk , qui correspondent (k) aux termes diagonaux u kk de la matrice U et qu'on appelle pivots, soient non nuls. Parlant de pivot nous devons bien choisir celui-ci pour que les solutions soient exactes.

2. Stratgie de choix du pivot Que se passe-t-il si on adopte la stratgie "simple" consistant choisir le premier coefficient rencontr dans la colonne considre, par exemple a1,1 si a1,1 0 ? Cela peut donner lieu de grandes erreurs d'arrondi, comme le montre l'exemple suivant :

On suppose que la machine fonctionne avec 3 chiffres significatifs en virgules flottantes Par exemple 0.0001, pi= 3:14159., 1/3 = 0.33333 sont convertis respectivement en :

valeurs approches sauf la premire qui se trouve tre exacte. Remarque : Une autre convention souvent utilise est l'criture commenante par 0. Comme dans +1 pi ~ 0.314x10 . Dans 1.00 il faut remarquer que les deux 0 sont significatifs et que 1.00 est l'criture approche de tout nombre strictement compris entre 0.995 et 1.005. Rappelons que les calculateurs utilisent le signe . plutt que la virgule de la tradition franaise pour sparer les entiers des -4 dcimales. Dans l'exemple (S) et selon "la stratgie simple" on prend pour pivot a1,1 = 1.00x10 . +4 On transforme donc la deuxime ligne par : L2-10 L1. Le calcul exact est

La mthode du Pivot total de Gauss

W.Moumouni

mais la machine prend la version arrondie :

et la rsolution du systme triangulaire obtenu est alors : y = 1 puis 0.0001x = 1 - y = 0 donc la solution trouve est x=0;y=1 ce qui est trs loigne de la solution exacte tire de (S1) : x = 1/0.9999 = 1.00010001 ~1.00 Explication : Lorsqu'on calcule x dans la premire quation 0:0001x = 1 y = 0, on divise par un petit pivot 0.0001, et l'erreur sur y dans le calcul approche de la deuxime quation se trouve -3 multiplie par 10000 : l'erreur d'arrondi qui peut aller initialement jusqu' 0.5 10 devient du mme ordre de grandeur que les solutions. Si au contraire, on change les lignes et on choisit pour pivot a2,1 = 1, la rsolution donne le

Systme triangulaire :
-3

D'ou y = 1 et cette fois x = 2 - y = 1, ce qui est correct 10 prs. Conclusion : ime Pivot total, pivot partiel. Mme si l'issue de la (k-1) tape on trouve on vient de voir qu'il est prfrable de choisir un autre pivot. (k-1) ime La stratgie du pivot partiel consiste 0 choisir a i,k avec i k de module maximum dans la k colonne de la matrice A. (k-1) La mthode du pivot total, consiste utiliser le plus grand des coefficients a i,k, parmi toutes les paires d'indices (i, j), ce qui mne des changes de lignes et de colonnes. La mthode est plus prcise mais plus coteuse en temps. De plus, il faut prendre garde au fait que la solution du systme transform n'est pas u, mais un vecteur obtenu en permutant les coordonnes de u, de la mme faon qu'on a permute les colonnes. Notre exemple de mauvais choix de pivot a1,1 dcrit un cas particulirement dfavorable o le rapport a2,1/a1,1 est le plus lev possible. Pour une matrice assez gnrale, le choix simple de pivot chaque tape est souvent numriquement acceptable et donne alors lieu une factorisation de la matrice A en produit de matrices triangulaires. Aprs avoir expliqu les diffrentes mthodes et leur faiblesse nous allons nous intresser la mthode du pivot total qui est une mthode plus prcise que les autres.

Ainsi nous allons donner un algorithme informatique permettant la rsolution de systmes linaire par cette mthode et en suite implmenter cet algorithme sous Matlab.

La mthode du Pivot total de Gauss

W.Moumouni

B. Prsentation de lalgorithme
Lanalyse des diffrentes mthodes permettant de mieux comprendre la mthode du pivot total, puisque celle-ci nintervient et est plus prcise que les autres mthodes, dans les cas o le systme initial des pivots trs petits. Rappelons brivement cette mthode qui consiste : 1. Choisir le pivot le plus grand dans toute la matrice A 2. Effectuer des permutations de lignes ou de colonnes en fonction de la localisation du meilleur pivot (plus grand). 3. Rendre la matrice A triangulaire suprieure ou infrieure dans notre cas triangulaire suprieur. 4. Appliquer la mthode de la monte ou descente en fonction du type de la matrice A obtenu dans ltape ci-dessus pour avoir la rsolution. 5. Mettre en ordre les solutions en fonction des permutations de colonnes effectue. Ces diffrentes tapes nous amnent penser scinder la rsolution en fonctions qui vont interagir pour rsoudre un systme donn. Nous allons dtailler lalgorithme de ces fonctions. Ensuite nous prsenterons les implmentations sous Matlab aprs.

1. La fonction de choix du pivot et de permutation


Voici lalgorithme de cette fonction, qui reoit en paramtre la matrice carre A, la matrice colonne b et la matrice colonne pivot_sol qui pour rle de donner lordre des solutions. Cette fonction renvoie comme rsultat les matrices A, b, et pivot_sol aprs permutation. fonction [A,b,pivot_sol] :=permut(A,b,pivot_sol) Debut n:=lireNbreLigne(A); (*Lecture du nombre de ligne de la matrice*); m:=lireNbreColonne(A); (*Lecture du nombre de colonne de la matrice*); (*Initialisation de l'ordre des solutions*) Pour i=1 n faire pivot_sol(i):=i; fait; Pour k=1 n-1 faire pivo:=0; (*Choix du pivot le plus grand dans la matrice A*) Pour i=k n faire Pour j=k n faire Si abs(A(i,j))>pivo faire (*Indexation du numro de ligne et de colonne du pivot*) pivo:=abs(A(i,j)); io:=i;jo:=j; fsi; fait; fait; Si pivo0 alors (*Permutation des lignes de la matrice A si le pivot est diffrent de zro et est le plus grand*) Pour j=K n faire temp:=A(k,j); A(k,j):=A(io,j); A(io,j):=temp; fait (*Permutation des colonnes pour la matrice b*) temp:=b(k); b(k):=b(io); b(io):=temp; (*Permutation des colonnes de la matrice A si le pivot est diffrent de zro et est le plus grand*) Pour i=K n faire
7

La mthode du Pivot total de Gauss


temp:=A(i,k); A(i,k):=A(i,jo); A(i,jo):=temp; fait; fait;

W.Moumouni

(*Actualisation de l'ordre des solutions avec le nouvelle ordre aprs permutation des colonnes de la matrice A*)

temps:=pivot_sol(k); pivot_sol(k):=pivot_sol(jo); pivot_sol(jo):=temps; Si A(k,k)==0 alors Afficher ('Un pivot nul ! => mthode de Gauss pivot total non applicable'); fsi; Si pivo#0 alors
(*La sortie de la grande boucle pour viter plusieurs permutations incohrent avec le principe du pivot total*)

fin boucle; fsi; fait; Fin

2. La fonction de dcomposition
Elle retourne comme rsultat la matrice A en une matrice triangulaire suprieure Lalgorithme de cette fonction est la suivante : fonction [A,b] :=triang(A,b) Debut n:=lireNbreLigne(A);(*Lecture du nombre de ligne de la matrice*); m:=lireNbreColonne(A);(*Lecture du nombre de colonne de la matrice*); Pour k=1 n-1 faire pivot:=A(k,k); Si pivot0 alors Pour i=k+1 n faire

b(i)=b(i)-(A(i,k)/pivot)*b(k);
Pour j=k+1 n faire

A(i,j):=A(i,j)-(A(i,k)/pivot)*A(k,j);
fait fait Sinon Afficher('pivot null'); fait fait (*Mettre Zero les elements qui doivent etre des zro*) Pour i=1 n faire Pour j=1 n faire Si(i>j) alors A(i,j) :=0; fait fait fait Fin

La mthode du Pivot total de Gauss


3. La fonction de la mthode de monte
Cette fonction est intgre dans la fonction globale de rsolution. fonction x :=montee(A,b) Dbut (*Calcul de xn*)

W.Moumouni

x(pivot_sol(n)):=b(n)/A(n,n);
Pour i=n-1 :1 s:=0; Pour j=i+1 n faire

s:=(s+A(i,j)*(x(pivot_sol(j))));
fait (*Calcul des xi*)

x(pivot_sol(i)):=((b(i)-s)/A(i,i));
fait Fin

Toute ces fonction interagir dans une fonction globale pour permettre la rsolution de systme linaire.

C. Prsentation du programme sous MatLab


Dans Matlab les fonctions sont dans des fichiers nous allons donc prsenter le contenu de ces fichiers.

1. Le code sous Matlab de la fonction de dcomposition


function [A,b]=triang(A,b) [n,m]=size(A); for k=1:n-1 pivot=A(k,k); if pivot~=0 for i=k+1:n b(i)=b(i)-(A(i,k)/pivot)*b(k); for j=k+1:n A(i,j)=A(i,j)(A(i,k)/pivot)*A(k,j); end end elseif disp('pivot null'); end end % // Mettre Zero les elements qui doivent etre des zro for i=1:n for j=1:n if(i>j)A(i,j)=0; end end end end

La mthode du Pivot total de Gauss

W.Moumouni

2. Le code sous Matlab de la fonction de choix du pivot et de permutation


function [A,b,pivot_sol]=permut(A,b,pivot_sol) [n,m]=size(A); %Initialisation de l'ordre des solutions for i=1:n pivot_sol(i)=i; end for k=1:n-1 pivo=0; %Choix du pivot le plus grand dans la matrice A for i=k:n for j=k:n if(abs(A(i,j))>pivo) pivo=abs(A(i,j)); io=i; jo=j; end end end if pivo~=0 %Permutation des lignes de la matrice A si le pivot est diffrent %de zro et est le plus grand temp=A(k,:); A(k,:)=A(io,:); A(io,:)=temp; %Permutation des colonnes pour la matrice b temp=b(k); b(k)=b(io); b(io)=temp; %Permutation des colonnes de la matrice A si le pivot %est diffrent de zro et est le plus grand temp=A(:,k); A(:,k)=A(:,jo) ; A(:,jo)=temp; end %Actualisation de l'ordre des solution avec le nouvelle ordre aprs %permutation des colonnes de la matrice A temps=pivot_sol(k); pivot_sol(k)=pivot_sol(jo); pivot_sol(jo)=temps; if A(k,k)==0 disp('Un pivot nul ! => methode de Gauss pivot total non applicable'); end if pivo~=0 %La sortie de la grande boucle pour viter plusieurs %permutations incohrent avec le principe du pivot total break; end end

10

La mthode du Pivot total de Gauss

W.Moumouni

3. Le code sous Matlab de la fonction de monte plus le programme


Dans ce code il y a linteraction des diffrentes fonctions dfinies plus haut. function y=gauss_total(A,b) [l,c]=size(b); [n,m]=size(A); if n==m if c==n pivot_sol=0; %Choix du pivot maximun et Permutation des lignes et colonnes

[A,b,pivot_sol]=permut(A,b,pivot_sol);
%triangularisation

[A,b]=triang(A,b);
%Presentation de la matrice A triangulaire suprieure disp('Matrice A triangulaire suprieure'); A disp(' '); %Rsolution par la methode de la monte %Car la matrice A est une matrice triangulaire suprieur

x(pivot_sol(n))=b(n)/A(n,n); for i=n-1:-1:1 s=0; for j=i+1:n s=(s+A(i,j)*(x(pivot_sol(j)))); end x(pivot_sol(i))=((b(i)-s)/A(i,i)); end
y=x; for i=1:n sol_ordre(pivot_sol(i))=y(i); end disp('Solution en ordre indication de l''ordre par sol_ordre'); for i=1:n disp(['X' num2str(i) '=' num2str(sol_ordre(i),'%10.4f')]); end disp(' '); disp('Solution en dsordre indication de l''ordre par pivot_sol'); for i=1:n disp(['X' num2str(pivot_sol(i)) '=' num2str(x(i),'%10.4f')]); end elseif c~=n disp('=>>>>>La matrice b n ''est pas correcte '); disp('=>>>>>Veuillez saisir une matrice b avec le nombre de colonne gal au nombre de ligne de la matrice A '); end elseif n~=m disp('=>>>>>La matrice n est pas carre '); disp('=>>>>>Veuillez saisir une matrice carre '); end end

11

La mthode du Pivot total de Gauss

W.Moumouni

D. Test du le programme en Matlab


Aprs avoir crit le programme, nous allons effectuer un test qui consiste entrer un systme dquation Ax=b et relever le rsultat donn par le programme afin de faire une comparaison avec la solution exacte. Test 1 : Par exemple pour le systme 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 , 1 , 1 , 1) Voici les matrice que nous allons saisir dans Matlab : A=[1 2 4 8 16;2 4 8 16 31;4 8 16 31 61;8 16 31 61 120 ;16 31 61 120 236 ] b=[31 61 120 236 464] Ensuite nous allons appel la fonction gauss_total(A,b).

12

La mthode du Pivot total de Gauss


Lappelle de la fonction gauss_total(A,b) et affichage des solutions :

W.Moumouni

A travers le rsultat on constate bien quil y a eu une permutation de colonnes et de ligne, ceci est montr par la matrice A triangulaire suprieure .Car la dernire ligne a t permute avec la premire ligne et la dernire colonne avec la premire. Nous constatons aussi que le rsultat est exacte quant lordre des solutions il ny a pas grand-chose puis que les rsultats sont tous gaux 1. Pour bien voire que le programme remet les rsultats en ordre en fonction des permutations de colonnes nous allons prendre un autre exemple. Test 2:

Soit le systme dquation suivant Ax=b comme suit : 4 A= 3 2 8 8 12 13 4 b= 5 11

9 18

13

La mthode du Pivot total de Gauss

W.Moumouni

Dans cette capture qui suit on voit trs bien que le programme garde lordre des solutions mme avec les permutations de colonnes.

Conclusion
Nous sommes maintenant arrivs au terme de notre projet dont nous allons donner un bref bilan par rapport aux objectifs que visaient celui-ci. Ce projet avait pour but de raliser la mthode du pivot total de Gauss pour la rsolution des systmes linaires. Ce qui nous a permis dune part de bien maitriser les algorithmes de cette mthode de rsolution, et dautre part une familiarisation avec loutil de programmation mathmatique MatLab version 7.6.0 de lanne 2008. Sans oublier quil serait trs intressant, de donner un programme qui rassemble tout les mthodes de rsolution de systmes linaires, ce qui nous permettrait de comparer les diffrentes solutions et de voir exactement les erreurs introduites par certaines mthodes.

14