Vous êtes sur la page 1sur 11

RESOLUTION NUMERIQUE DES SYSTEMES LINEAIRES (ND/NG, 23 mai 2017) 9

II – Méthode de Gauss (suite et fin)


3◦ ) Méthode de Gauss par ordinateur : les procédures algorithmiques.
La programmation effective de la résolution d’un système linéaire par la méthode de Gauss sera effectuée
par une procédure algorithmique de base, que nous nommerons GAUSS (et qui pourra être appelée depuis
un programme informatique principal, après traduction dans un langage de programmation évolué, comme
le C, le FORTRAN ou MATLAB, par exemple). Mais, pour qu’elle ne soit pas trop longue (et donc pénible à
s’y retrouver), cette procédure GAUSS ne joue qu’un rôle de gestionnaire de tâches (task manager , en
anglais), en ce sens que son bloc d’instructions (ou corps de la procédure) ne consiste qu’en 2 appels
successifs de procédures : un appel pour effectuer la phase d’élimination (procédure ELIMINATION GAUSS),
puis l’autre la phase de résolution (procédure REMONTEE ).
La procédure REMONTEE a déjà été écrite précédemment. Nous ne présentons donc ici que les procédures
GAUSS et ELIMINATION GAUSS, plus une procédure auxiliaire PIVOT PARTIEL . Cette dernière est ap-
pelée dans le corps de la procédure ELIMINATION GAUSS pour mettre en œuvre le choix et le positionnement
du pivot pour l’élimination sur une colonne k donnée, ceci par la stratégie du pivot partiel.
Pour bien lire les procédures ci-après, bien noter les faits suivants :
• N.B. 1. Sont utilisés, parce que censés avoir été déclarés au début du programme principal :
1. un entier n, constante représentant l’ordre du système linéaire à résoudre, et créé par la déclaration :
const : n = 100 ; /* N.B. La valeur 100 est juste pour illustration. */
2. un type matrice, créé par la déclaration :
type : matrice = tableau [ 1...n, 1...n ] de réels ;
3. un type vecteur, créé par la déclaration :
type : vecteur = tableau [ 1...n ] de réels ;
• N.B. 2. On abandonne la notation mathématique des éléments d’une suite, pour revenir à l’orthodoxie de
la notation des éléments d’un tableau dans un programme informatique. Ainsi :
– l’élément ou coefficient (i, j) de la matrice A sera noté A[i, j], et non plus aij ;
– la coordonnée n◦i du vecteur b sera noté b[i], et non plus bi .
a) Procédure algorithmique : Algorithme de la méthode de Gauss.

Procédure GAUSS ( A : matrice ; b : vecteur ; var X : vecteur) ;


/* Objectif : Résolution du système de Cramer dans IR n , A.X = b,
par la méthode de Gauss (avec stratégie du pivot partiel pour le choix
des pivots pendant la phase d’élimination). */
/* Paramètre(s) entrant(s) :
− A ∈ Mn (IR), inversible, matrice du système ;
− b ∈ IR n , vecteur-2nd membre du système. */
/* Paramètre(s) sortant(s) :
− X ∈ IR n , vecteur-solution de A.X = b,
calculé par la méthode de Gauss avec stratégie du pivot partiel. */

/* ** Corps de la procédure ***/


début /* GAUSS */
/* Phase 1 : Elimination de Gauss, avec stratégie du pivot partiel. */
[ A, b ] ←− ELIMINATION GAUSS(A, b) ;
/* Après ceci, A est devenue sup-triangulaire : A = A(n−1) , b = b(n−1) */
/* Phase 2 : Résolution du système sup-triangulaire obtenu. */
[ X ] ←− REMONTEE (A, b, X) ;
/* Renvoi du résultat final. */
Renvoyer (X) ;
fin ; /* GAUSS */
10 II - Méthode de Gauss

b) Procédure algorithmique : Algorithme de l’élimination de Gauss.

Procédure ELIMINATION GAUSS ( var A : matrice ; var b : vecteur) ;


/* Objectif : Elimination de Gauss dans la matrice A et le vecteur-2nd membre
b de A.X = b, système de Cramer dans IR n , pour le transformer en un
système équivalent, toujours noté A.X = b, dont la nouvelle matrice A sera
sup-triangulaire.
N.B. Pour l’élimination sur les colonnes successives de A, les pivots sont
choisis selon la stratégie du pivot partiel. */
/* Paramètre(s) entrant(s) :
− A ∈ Mn (IR), inversible, matrice du système ;
− b ∈ IR n , vecteur-2nd membre du système. */
/* Paramètre(s) sortant(s) :
− A et b modifiés par l’élimination de Gauss,
avec A devenue sup-triangulaire, i.e. A = A(n−1) et b = b(n−1) . */
Variables locales :
i, j, k : entier ;
ℓik : réel ;
/* ** Corps de la procédure ***/
début /* ELIMINATION GAUSS */
Pour k = 1 (1) n − 1 faire
/* Début de l’élimination dans la colonne k de A. */
/* 1. Recherche, puis positionnement du pivot en (k, k) dans A, */
/* par la stratégie du pivot partiel. */
[ A, b ] ←− PIVOT PARTIEL (A, b, k) ;
/* Après ceci, le bon pivot est positionné en (k, k) dans A. */
/* 2. Elimination proprement dite dans la colonne k de A, */
/* i.e. annulation des coefficients A[i, k], pour i = k + 1 (1) n. */
Pour i = k + 1 (1) n faire
/* 2.1. Calcul du coeff. multiplicatif de l’équation n◦k du système */
/* pour la soustraire de l’équation n◦i. */
ℓik ←− A[i, k]/A[k, k] ;
/* 2.2. Calculs pour que Li(A) ←− Li(A) − ℓik ∗ Lk(A) */
Pour j = k + 1 (1) n faire
A[i, j] ←− A[i, j] − ℓik ∗ A[k, j] ;
finPour ;
/* Instruction implicite cachée ci-dessus : A[i, k] ←− 0 */
/* 2.3. Modification appropriée de la coordonnée n◦i du vecteur b. */
b[i] ←− b[i] − ℓik ∗ b[k] ;
finPour ;
/* Fin de l’élimination dans la colonne k de A. */
finPour ;
Renvoyer (A, b) ;
fin ; /* ELIMINATION GAUSS */
RESOLUTION NUMERIQUE DES SYSTEMES LINEAIRES (ND/NG, 23 mai 2017) 11

c) Procédure algorithmique : Algorithme du pivot partiel .

Procédure PIVOT PARTIEL ( var A : matrice ; var b : vecteur ; k : entier ) ;


/* Objectif : Recherche et positionnement du pivot en (k, k), selon la stratégie du
pivot partiel, pour l’élimination de Gauss sur la colonne k dans la matrice A
pour A.X = b, système de Cramer dans IR n . */
/* Paramètre(s) entrant(s) :
− A ∈ Mn (IR), inversible, matrice du système ;
− b ∈ IR n , vecteur-2nd membre du système ;
− k ∈ [ 1 (1) n − 1 ], indice de la colonne où on doit maintenant éliminer.
• N.B. En entrée ici, A et b sont tels qu’issus de l’élimination de Gauss
dans le système A.X = b, des colonnes 1 à k − 1 de A, et donc
A est déjà « sup-triangulaire dans ses colonnes 1 à k − 1 » ,
i.e. A = A(k−1) et b = b(k−1) . */
/* Paramètre(s) sortant(s) :
− A et b éventuellement modifiés par le positionnement en (k, k) du pivot
trouvé par la stratégie du pivot partiel parmi les coefficients A[i, k], pour
i = k (1) n. */
Variables locales :
i, j, imax : entier ;
aux : réel ;

/* ** Corps de la procédure ***/


début /* PIVOT PARTIEL */
/* Recherche de l’indice imax tel que | A[imax , k] | = max | A[i, k] | */
k6i6n
imax ←− k ;
Pour i = k + 1 (1) n faire
Si | A[i, k] | > | A[imax , k] | alors imax ←− i ; finSi ;
finPour ;
/* Après ceci, on a un indice imax vérifiant : | A[imax , k] | = max | A[i, k] | */
k6i6n
/* Si imax 6= k, alors il faut ramener le coefficient A[imax , k] en position (k, k)
dans A, par permutation des équations n◦imax et n◦k du système A.X = b, ce
qui va transformer ce dernier en un système équivalent, donc de même vecteur-
solution X. */
Si imax 6= k alors
/* 1. Permutation des lignes imax et k de A, i.e. Limax (A) ←→ Lk(A). */
Pour j = k (1) n faire
aux ←− A[imax , j] ; A[imax , j] ←− A[k, j] ; A[k, j] ←− aux ;
finPour ;
/* Ici, l’ancienne Limax (A) est devenue la nouvelle Lk(A), et vice versa. */
/* 2. Permutation des coordonnées imax et k de b, i.e. b[imax ] ←→ b[k]. */
aux ←− b[imax ] ; b[imax ] ←− b[k] ; b[k] ←− aux ;
/* Ici, l’ancienne b[imax ] est devenue la nouvelle b[k], et vice versa. */
finSi ;
Renvoyer (A, b) ;
fin ; /* PIVOT PARTIEL */
12 II - Méthode de Gauss

4◦ ) Exécution de l’algorithme de la méthode de Gauss sur ordinateur :


retour sur le problème crucial du choix des pivots pendant l’élimination.
a) Le problème.
L’algorithme de la méthode de Gauss sera exécuté par ordinateur . Or, il opère essentiellement des
calculs sur des nombres réels, et il en effectue un très grand nombre en général. Mais on sait que :
Calculs sur les réels par ordinateur =⇒ erreur d’arrondi à chaque opération
Et chaque opération effectuée transmettant l’erreur d’arrondi de son résultat à toute opération ultérieure
de l’algorithme utilisant ce résultat, il en découle un phénomène de propagation des erreurs d’arrondi
lors de l’exécution en machine de tout algorithme d’Analyse Numérique. De ce fait, les résultats
rendus par la machine ne seront, en fait, que des approximations des vrais résultats attendus de l’algorithme. Il
est alors vital d’écrire un tel algorithme de manière à limiter, autant que possible, l’effet de cette propagation
des erreurs d’arrondi sur les résultats rendus par l’algorithme, i.e. essayer de s’assurer que ceux-ci soient,
certes, des approximations, mais aussi bonnes que possible des vrais résultats attendus.
C’est donc aussi le cas de l’algorithme de la méthode de Gauss. Ainsi, ce que la machine va rendre comme
résultat à la suite de son exécution pour résoudre A.X = b dans IR n , ce ne sera pas le vrai vecteur-solution
X ∈ IR n et dont les coordonnées sont les vraies valeurs attendues des inconnues xi . Elle va plutôt rendre un
vecteur X e ∈ IR n dont les coordonnées x ei ne sont, a priori, que des approximations des vraies xi .
• • • Question :
Peut-on s’arranger, lors de l’écriture de l’algorithme de la méthode de Gauss, pour que le
vecteur X,e produit par son exécution sur ordinateur, soit aussi proche que possible du vrai
vecteur-solution X, i.e. que chaque coordonnée x ei soit aussi proche que possible de la vraie
valeur de l’inconnue xi correspondante ?
• • • Réponse :
Oui, et ce en jouant sur la partie de l’algorithme qu’on peut faire varier sans affecter la
validité théorique de cet algorithme, i.e. le fait qu’il résolve le système A.X = b.
Cette partie, c’est le travail de choix des pivots pendant l’élimination .
En effet, de par la théorie connue de l’Algèbre Linéaire dans ce domaine, au début de l’élimination sur une
colonne k de la matrice A, l’essentiel est de positionner un coefficient non nul en position (k, k) dans A, du
moment que ceci est fait de manière à ne pas affecter le vecteur-solution X du système. En particulier, tout
coefficient aik non nul, pour un indice i ∈ [ k (1) n ], est un choix « légal » de pivot pour l’élimination sur
la colonne k. Cependant, certains choix « légaux » de pivot, une fois celui ci positionné en (k, k), peuvent
produire des effets désastreux dans la suite des calculs pour ce qui est de la propagation des erreurs d’arrondi
et leur impact final sur les résultats rendus par l’algorithme lors de son exécution-machine, i.e. le vecteur X e
calculé par l’ordinateur est très éloigné du vrai vecteur-solution X du système qu’on veut résoudre.
b) La principale source du problème.
Le point crucial est l’ordre de grandeur des coefficients auxiliaires ℓik = aik /akk calculés pendant la
phase d’élimination. En effet, chaque ℓik calculé et tel que | ℓik | > 1 va amplifier l’effet des erreurs d’arrondi
dans tout calcul ultérieur où il interviendra, et plus | ℓik | sera grand par rapport au nombre 1, plus cette
amplification sera grande, pour devenir catastrophique si | ℓik | ≫ 1 (lire « très supérieur à 1 » ) produisant
e comme approximation de X. Pour expliquer ce
alors l’effet désastreux signalé ci-dessus sur la qualité de X
phénomène, rappelons le bloc d’instructions de l’algorithme de l’élimination de Gauss où apparaı̂t ℓik :

Pour i = k + 1 (1) n faire


ℓik ←− aik/akk ; . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .(i1)
Pour j = k + 1 (1) n faire
aij ←− aij − ℓik ∗ akj ; . . . . . . . . . . . . . . . . . . (i2)
finPour ;
bi ←− bi − ℓik ∗ bk ; . . . . . . . . . . . . . . . . . . . . . . . . . . (i3)
finPour ;
RESOLUTION NUMERIQUE DES SYSTEMES LINEAIRES (ND/NG, 23 mai 2017) 13

Dans l’écriture de ce bloc d’instructions, on a conservé la notation mathématique traditionnelle des termes
indicés des suites. Cette double boucle Pour met en évidence que les valeurs de presque tous les coefficients
de la matrice A seront modifiées plusieurs fois au cours de l’algorithme de l’élimination de Gauss. Cela est
aussi vrai des coordonnées du vecteur b. Examinons alors les 2 instructions de ce bloc qui font appel à la
valeur de ℓik après le calcul de celle-ci, à savoir les instructions (i2) et (i3). La modification répétée des
valeurs des aij et des bi a comme conséquence que pour k > 2, quand il faudra calculer les expressions
cij = aij − ℓik ∗ akj ,
di = bi − ℓik ∗ bk ,
au 2nd membre des instructions (i2) et (i3), du fait des erreurs d’arrondi dans les calculs précédents de
aij , akj , bi , bk , on aura plutôt des valeurs approchées respectives e akj , ebi , ebk de ces 4 nombres réels. Ainsi,
aij , e
au lieu de cij et di , la machine ne pourra essayer de calculer que les 2 valeurs approchées :
cij = e
e aij − ℓik ∗ eakj ,
dei = ebi − ℓik ∗ ebk .
D’où des erreurs absolues sur les valeurs respectives de cij et di (avant même leur calcul) :
δcij = e aij − aij ) − ℓik ∗ (e
cij − cij = (e akj − akj ), =⇒ δcij = δaij − ℓik ∗ δakj ; (1)

δdi = dei − di = (ebi − bi ) − ℓik ∗ (ebk − bk ), =⇒ δdi = δbi − ℓik ∗ δbk . (2)

=⇒ Si | ℓik | est grand, i.e. | ℓik | ≫ 1, alors on pourra avoir : | δcij | ≫ | δakj | et | δdi | ≫ | δbk |,
et donc l’erreur sur akj se propage de manière catastrophique sur la valeur de cij , car elle est amplifiée
d’un facteur | ℓik | grand. Même effet de l’erreur sur bk propagée sur la valeur de di .
Il y a un coefficient qui est modifié pendant les calculs pour l’élimination sur toutes les colonnes : ann .
De ce fait, si le phénomène ci-dessus se répète tout au long de l’exécution de l’algorithme par ordinateur, la
dernière valeur de ann (i.e. celle sortie de l’élimination de la colonne n − 1 de A) pourra être une valeur
approchée e ann totalement aberrante, i.e. très loin de la dernière vraie valeur attendue de ann au sortir
de la phase d’élimination. Le même raisonnement s’applique à la coordonnée bn du vecteur b.
Or, rappelons que la phase de résolution est censée commencée par le calcul de xn = bn /ann , qui sera
donc en fait remplacé par x en = ebn /eann , lequel sera une valeur approchée aberrante de l’inconnue xn . Et
comme les inconnues se calculent dans l’ordre xn −→ xn−1 −→ · · · −→ x1 , chacune se calculant à partir de
celles précédemment calculées, il s’ensuivra que les inconnues x1 , · · · , xn seront toutes calculées de manière
aberrante. Et donc la résolution du système linéaire A.X = b par ordinateur aura totalement échoué !!!
Par contre, dans le cas où | ℓik | 6 1, on a :
© ª
(1) =⇒ | δcij | 6 2 max | δaij |, | δakj | , (3)
© ª
(2) =⇒ | δdi | 6 2 max | δbi |, | δbk | . (4)

Donc, dans ce cas, l’erreur sur cij est, au pire, de l’ordre du double de la plus grande erreur entre celle sur
aij et celle sur akj . Ainsi, il pourrait y avoir amplification des erreurs, mais elle sera bien moindre que dans
le cas précédent. Raisonnement anlogue pour l’erreur sur di en fonction de celles sur bi et bk .
c) Idée de contournement : stratégie appropriée de choix des pivots pendant l’élimination.
Il résulte de l’analyse précédente que, en vue d’une programmation par ordinateur de la méthode de
Gauss, il faut essayer de choisir les pivots pendant l’élimination pour garantir de toujours avoir :
| ℓik | 6 1, ∀ k = 1 (1) n − 1, ∀ i = k + 1 (1) n.
Or, remarquons que :
| ℓik | 6 1 ⇐⇒ | aik | 6 | akk | ⇐⇒ | aik | 6 | pivot choisi pour l’élimination sur la colonne k |.
• • • Idée de base pour contourner la difficulté :
Autant que possible, pendant la phase d’élimination, il faut éviter d’utiliser des pivots trop
petits (en valeur absolue), notamment comparés aux coefficients aik qu’ils auront à diviser
pendant l’élimination sur la colonne k après leur positionnement en (k, k), i.e. pour le calcul
des ℓik = aik /akk , i = k + 1 (1) n. En particulier, au début de l’élimination sur la colonne k,
il est déconseillé de prendre comme pivot le premier coefficient aik non nul rencontré, avec
i ∈ [ k (1) n ], justement parce qu’il pourra s’avérer trop petit (en valeur absolue). Il faut donc
utiliser une stratégie appropriée de choix des pivots pour limiter ces risques.
14 II - Méthode de Gauss

d) Stratégie du pivot partiel.


C’est, de loin, la plus utilisée en pratique. Elle consiste, au début de l’élimination sur une colonne
k de A, à trouver, puis adopter comme pivot un coefficient aimax , k vérifiant :
imax ∈ [ k (1) n ] et | aimax , k | = max | aik | .
k 6i 6n

e) Stratégie du pivot total.


Elle consiste, au début de l’élimination sur une colonne k de A, à trouver, puis adopter comme pivot un
coefficient aimax , jmax vérifiant :
imax , jmax ∈ [ k (1) n ] et | aimax , jmax | = max | aik | . (5)
k 6 i,j 6 n

Donc le pivot cherché ici est le plus grand coefficient (en valeur absolue) dans la sous-matrice de A allant
de la ligne k à la ligne n, et de la colonne k à la colonne n, ce qui est une zone de recherche beaucoup
plus étendue pour le pivot de l’élimination sur une colonne k de A, et donc un travail bien plus coûteux (en
temps-machine) que dans la stratégie du pivot partiel.
Mais ce coût élevé pour la recherche des pivots n’est pas le seul défaut de la stratégie du pivot total.
En effet, son utilisation dans la phase d’élimination de la méthode de Gauss requiert aussi un travail de
conception plus élaboré dans la mise au point de l’algorithme de la méthode. Ceci est dû aux problèmes
particuliers posés par la gestion des pivots trouvés pour l’élimination sur une colonne k, mais qui se trouvent
initialement sur une colonne jmax 6= k. En effet, une fois trouvés les indices imax et jmax vérifiant (5) ci-
dessus, si ceux ci sont tels que imax 6= k et/ou jmax 6= k, alors le pivot choisi aimax , jmax n’est pas en position
(k, k) dans la matrice A. Pour pouvoir procéder à l’élimination sur la colonne k, il faut donc préalablement
ramener ce pivot choisi en position (k, k) dans A. Ceci se fait en permutant :
– les équations k et imax du système linéaire, si imax 6= k ;
– les colonnes k et jmax de la matrice A, si jmax 6= k.
Or, c’est la nécessité de cette dernière manœuvre qui complique la situation. En effet, si la permutation
de 2 équations d’un système linéaire A.X = b ne change pas son vecteur-solution X, il n’en va pas de même
pour la permutation de 2 colonnes de sa matrice A. En fait, il est facile de voir que permuter les colonnes
k et jmax de A entraı̂ne la permutation des inconnues xk et xjmax du système linéaire A.X = b, et donc
des coordonnées n◦ k et n◦ jmax du vecteur X. Ce scénario pouvant se répéter plusieurs fois au cours de
l’élimination dans les colonnes successives de A avec stratégie du pivot total, il en résulte qu’à la sortie
de cette élimination, le vecteur-solution X aura, presque certainement, été transformé en un autre vecteur
Xb ∈ IR n et dont les coordonnées seront une permutation plus ou moins compliquée des coordonnées de X. Et
c’est ce vecteur X b qui sera renvoyé par l’algorithme de remontée au terme de la résolution du système sup-
triangulaire produit par l’algorithme de l’élimination de Gauss avec stratégie du pivot total. Par conséquent,
la résolution du système A.X = b ne sera pas achevée. Elle ne le deviendra que si, après l’algorithme de
remontée, on remet les coordonnées de X b dans le bon ordre pour obtenir le vrai vecteur-solution X.
C’est cette dernière nécessité qui requiert un travail algorithmique supplémentaire dans les procédures
précédemment écrites pour la mise en œuvre de la méthode de Gauss par ordinateur. Ceci est dû au fait que
la remise dans le bon ordre des coordonnées de X b à la sortie de la phase de résolution ne peut être faite que
si on a préalablement introduit, dans l’algorithme de l’élimination de Gauss avec stratégie du pivot total, un
mécanisme clair de suivi et d’enregistrement de toutes les permutations de colonnes effectuées pendant cette
élimination. La manière la plus simple de définir un tel mécanisme est d’introduire une variable T de type
tableau d’entiers, et qui sera paramètre entrant et/ou sortant, selon les cas, dans les différentes procédures :
var T : tableau [ 1...n ] d’entiers ;
On initialise T comme suit :
Pour k = 1 (1) n faire
T [k] ←− k ;
finPour ;
Mais, ensuite, il y a au moins 2 manières différentes de modifier le contenu du tableau T pendant l’élimination
pour y enregistrer les informations sur les permutations de colonnes effectuées :
RESOLUTION NUMERIQUE DES SYSTEMES LINEAIRES (ND/NG, 23 mai 2017) 15

• Approche 1.
Si on a permuté les colonnes k et jmax de la matrice A au début de l’élimination sur la colonne k,
alors on permute aussi les valeurs des éléments T [k] et T [jmax ] du tableau T .
• Approche 2.
Si on a permuté les colonnes k et jmax de la matrice A au début de l’élimination sur la colonne k,
alors on effectue simplement l’affectation : T [k] ←− jmax ;
Et cela implique aussi 2 manières radicalement différentes de remettre dans le bon ordre les coordonnées du
vecteur X b à la sortie de l’algorithme de remontée, ceci grâce au contenu final du tableau T à la sortie de
l’algorithme de l’élimination de Gauss avec stratégie du pivot total.

b après l’algorithme de remontée)


⊲ Exercice E6 (Mise en ordre des coordonnées de X
On admettra ici qu’au début du programme principal, on a préalablement défini un type tabEnt ,
par la déclaration :
type : tabEnt = tableau [ 1...n ] d’entiers ;
Avec cela, pour chacune des 2 approches de remplissage du tableau T ci-dessus, faire le travail suivant :
1◦ ) Modifier les procédures GAUSS, ELIMINATION GAUSS et PIVOT PARTIEL de manière appro-
priée pour inclure la gestion du tableau T .
2◦ ) Concevoir, puis écrire une procédure algorithmique MISE EN ORDRE , qui prend, en entrée, T
b produit par REMONTEE , et renvoie le vrai vecteur-solution X du système.
et le vecteur X

f) Stratégie du pivot partiel contre stratégie du pivot total : qui gagne???


Sur un plan théorique, utilisant des pivots a priori plus grands (en valeur absolue) pendant la phase
d’élimination de Gauss, la stratégie du pivot total devrait être plus efficace que celle du pivot partiel, i.e.
entraı̂ner une moindre propagation des erreurs d’arrondi pendant l’exécution de l’algorithme de la méthode
de Gauss par ordinateur, et donc produire un vecteur X e ∈ IR n bien plus proche du vrai vecteur-solution X.
Cependant, la vérité est que les systèmes linéaires pour lesquels on observe une supériorité marquée de la
qualité de la solution produite par la méthode de Gauss avec stratégie du pivot total sur la solution produite
avec stratégie du pivot partiel sont très rares et trop particuliers dans la structure de leur matrice pour avoir
des chances d’être rencontrés en pratique. Ajoutés à cela :
1. le coût plus élevé (en temps-machine) de la recherche des pivots par la stratégie du pivot total ;
2. et le conception algorithmique plus élaborée requise dans la mise au point de l’algorithme de la méthode.
• Conclusion : Au bilan global, la stratégie du pivot partiel l’emporte très nettement. Ainsi,
dans toute la suite, quand nous parlerons de « méthode de Gauss » , il sera sous-entendu
(sauf précision spécifique contraire) que les pivots ont été choisis pendant l’élimination selon
la stratégie du pivot partiel.

5◦ ) Méthode de Gauss sans permutation.


a) Motivation et introduction.
Les systèmes linéaires les plus simples à résoudre par la méthode de Gauss sont ceux pour lesquels on n’a
pas à chercher les pivots :

Définition-Propriété d.1 (Méthode de Gauss sans permutation)


La méthode de Gauss sans permutation pour résoudre un système A.X = b est la méthode de
Gauss au cours de laquelle aucune permutation n’est effectuée pendant l’élimination.
Ainsi, au début de l’élimination sur une colonne k de A, le coefficient trouvé en position (k, k) dans
A est systématiquement utilisé comme pivot pour l’élimination sur cette colonne, et donc on n’effectue
aucune permutation pour positionner ce pivot, ceci ∀ k = 1 (1) n − 1.

b) Méthode de Gauss sans permutation : avantages/inconvénients ???


Bien qu’elle semble séduisante sur le papier, il existe des systèmes linéaires pour lesquels on ne peut pas
appliquer la méthode de Gauss sans permutation. Cas le plus trivial : si le coefficient a11 est nul.
16 II - Méthode de Gauss

D’autre part, même lorsqu’il est possible de l’appliquer théoriquement, cela peut s’avérer dangereux pour
résoudre certains systèmes par la méthode de Gauss par ordinateur, car pouvant aboutir à utiliser des pivots
certes non nuls, mais très petits en valeur absolue et donc susceptibles de causer le genre de propagation
désastreuse des erreurs d’arrondi signalée plus haut.
• Conclusion : A moins d’être sûr(e) que la matrice du système vérifie certaine(s) propriété(s) spécifique(s)
(Cf. ci-après), l’utilisation de la méthode de Gauss sans permutation n’est pas recommandée lorsque cette
méthode doit être programmée par ordinateur. Au strict minimum, et sauf raison valable pour ne
pas le faire, il faut utiliser la stratégie du pivot partiel.

6◦ ) Systèmes de Cramer particuliers et choix des pivots.


Il y a des systèmes linéaires pour lesquels, grâce à une propriété particulière remarquable de leur
matrice A, l’utilisation d’une stratégie particulière pour choisir les pivots pendant l’élimination de Gauss
est inutile. Pour eux, au début de l’élimination sur une colonne k de A, le coefficient trouvé en
position (k, k) dans A fera toujours l’affaire comme pivot pour l’élimination sur cette colonne :
1. que ce soit sur le plan de la théorie de l’Algèbre Linéaire, en ce sens que ce coefficient akk trouvé au
début de l’élimination sur la colonne k de A sera toujours non nul ;
2. ou sur le plan de la stabilité numérique de l’algorithme, en ce sens qu’il n’y a pas de risque de propagation
désastreuse des erreurs d’arrondi dans l’algorithme lors de son exécution par ordinateur.
On peut donc résoudre ces systèmes linéaires avantageusement et efficacement par la méthode
de Gauss sans permutation.
a) Systèmes linéaires avec matrice à diagonale strictement dominante (DSD).
Le genre de matrices ci-après se rencontrent dans certaines applications.

Définition d.2 (Matrice à diagonale strictement dominante)


Une matrice carrée A ∈ Mn (IR) est « à diagonale strictement dominante » (en abrégé : DSD)
lorsque ses coefficients aij vérifient la propriété : n
X
∀ i ∈ [ 1 (1) n ], | aii | > | aij | ,
j =1
j 6= i

i.e. sur chaque ligne de la matrice A, la valeur absolue du coefficient diagonal est plus
grande que la somme des valeurs absolues des autres coefficients de la ligne.

On montre que si une matrice carrée A est DSD, alors elle est inversible. De plus, la résolution,
par ordinateur, d’un système linéaire A.X = b ayant A comme matrice peut se faire par la méthode de
Gauss sans permutation, ceci sans risque de propagation désastreuse des erreurs d’arrondi.
L’Exercice ci-après illustre une situation pratique intéressante de système linéaire à matrice DSD.
⊲ Exercice E7 (Matrice pour calculer la fonction d’interpolation spline cubique : DSD !)
Soit f : [ a, b ] −→ IR, une fonction dont on connaı̂t les valeurs respectives y0 , · · · , yN +1 qu’elle
prend aux nœuds a0 , · · · , aN +1 d’une subdivision σ donnée de l’intervalle [ a, b ].
On rappelle que, pour calculer, à partir de ces données, les coefficients des polynômes pi exprimant
la fonction d’interpolation spline cubique de f dans les différents sous-intervalles [ ai , ai+1 ] découpés
par la subdivision σ dans [ a, b ], apparaı̂t la nécessité de résoudre, préalablement, un certain système
de N équations linéaire et à N inconnues.
Montrer que la matrice A de ce système linéaire est à diagonale strictement dominante.
b) Systèmes linéaires avec matrice symétrique et définie positive (SDP).
Le genre de matrices ci-après se rencontrent dans beaucoup d’applications.

Définition-Propriété d.3 (Matrice symétrique et définie positive)


Une matrice carrée A ∈ Mn (IR) est « symétrique et définie positive » (en abrégé : SDP)
lorsqu’elle est symétrique et vérifie, de plus : ∀ u ∈ IR n \ {0IR n }, h A.u , u i > 0, n
X
où h u , v i désigne le produit scalaire canonique de 2 vecteurs u, v ∈ IR n , i.e. h u , v i = ui vi .
i=1
RESOLUTION NUMERIQUE DES SYSTEMES LINEAIRES (ND/NG, 23 mai 2017) 17

On montre que si une matrice carrée A est SDP, alors elle est inversible. De plus, la résolution,
par ordinateur, d’un système linéaire A.X = b ayant A comme matrice peut se faire par la méthode de
Gauss sans permutation, ceci sans risque de propagation désastreuse des erreurs d’arrondi.

• • • Remarque 1 (Méthode de Gauss vs. méthode de Cholesky)


Signalons que lorsque la matrice A est SDP, il existe une méthode bien plus efficace que la méthode
de Gauss (en termes de moindre propagation des erreurs d’arrondi) pour résoudre le système A.X = b.
C’est la méthode de Cholesky .

Une propriété intéressante estt que la matrice du système linéaire permettant de construire la
fonction d’interpolation spline cubique est SDP, comme conséquence du résultat remarquable suivant :

Théorème E.II-6.1 (Matrice DSD et SDP)


Si une matrice carrée A ∈ Mn (IR) est symétrique, DSD et a tous ses coefficients diagonaux > 0,
alors A est une matrice SDP.

7◦ ) Autres considérations sur la méthode de Gauss.


a) Coût numérique de la méthode de Gauss.
C’est celui de la phase d’élimination plus celui de la phase de résolution.
n3 − n n3 − n n2 + n
• Coût de la phase d’élimination : (+), (×), (÷).
3 3 2
⊲ Exercice E8
Vérifier ce décompte.
n2 − n n2 − n
• Coût de la phase de résolution : (+), (×), n (÷).
2 2
Il s’agit du coût de l’algorithme de remontée pour résoudre un système sup-triangulaire.
⊲ Exercice E9
Coût final de la méthode de Gauss pour résoudre un système de Cramer d’ordre n ?

b) Systèmes linéaires creux.


Un système linéaire est dit creux lorsque sa matrice A est creuse, i.e. comporte une proportion très
majoritaire de coefficients nuls. Exemple : lorsque A est une matrice tridiagonale.
Un système de Cramer de ce type peut, évidemment, être résolu par l’algorithme de la méthode de Gauss
précédemment écrit. Cependant, une analyse assez élémentaire de l’algorithme mettra facilement en évidence
qu’on y effectue alors un très grand nombre de calculs superflus, à travers un « moulinage » inutile de zéros.
D’où un grand nombre d’ « opérations arithmétiques blanches » et d’ « affectations blanches » :

Définition-Propriété d.4 (Opération arithmétique blanche/affectation blanche)


1. Une opération arithmétique blanche est une opération arithmétique dont le résultat est connu
avant même qu’elle ne soit effectuée.
2. Une affectation blanche dans un algorithme est une instruction dans laquelle on affecte, à une
variable, la valeur qu’elle a déjà quand on vient effectuer l’affectation.
• Dans un algorithme, à chaque fois que l’un de ces 2 cas de figure sera rencontré, cela représentera
une perte de temps à l’exécution pour l’ordinateur.

L’efficacité algorithmique ici consiste, en fait, à écrire une adaptation de l’algorithme de Gauss pour un
système ayant ce type de matrice, après avoir effectué une analyse pour y repérer et supprimer tous les
calculs et instructions superflus pour un tel système. Ceci est très fortement conseillé, notamment, pour
résoudre efficacement le système linéaire tridiagonal dont les valeurs des inconnues permettent de calculer les
coefficients des polynômes pi exprimant la fonction d’interpolation spline cubique d’une fonction f dans les
différents sous-intervalles [ ai , ai+1 ] découpés par une subdivision de points de [ a, b ].
18 II - Méthode de Gauss

8◦ ) Méthode de Gauss et résolution de plusieurs systèmes de même matrice.


a) Le problème.
Une situation courante en modélisation numérique est celle où on se retrouve confronté à la nécessité de
devoir résoudre simultanément plusieurs systèmes de Cramer dans IR n de même matrice :
A.X(1) = b(1) , A.X(2) = b(2) , · · · , A.X(p) = b(p) , (6)

où la matrice A est donnée dans Mn (IR), ainsi que les p vecteurs-2nds membres b(1) , · · · , b(p) dans IR n .
Les p systèmes linéaires dans (6) ont la même matrice A, et ne diffèrent que par leurs seconds membres (et
donc aussi par leurs vecteurs-solutions).
On souhaiterait résoudre ces p systèmes de Cramer dans IR n par la méthode de Gauss. Evidemment, on
pourrait le faire en exécutant l’algorithme de cette méthode sur chacun de ces p systèmes, indépendamment.
Ceci donnerait effectivement les résultats attendus pour chacun d’eux. Cependant, une analyse attentive de
la situation mettrait, assez vite, en évidence que cette résolution indépendante des p systèmes s’est
accompagnée d’une assez grossière inefficacité en termes de la quantité de calculs effectués.
En effet, un ré-examen attentif de l’algorithme de la méthode de Gauss pour résoudre un système de Cramer
A.X = b dans IR n révèle rapidement que les instructions et les calculs concernant le vecteur-2nd membre
b sont très minoritaires dans cet algorithme. La plupart des instructions et calculs de l’algorithme portent
sur les coefficients de la matrice A. Ceci n’est pas surprenant, vu que la matrice A a n2 coefficients réels,
contre les seulement n coordonnées réelles du vecteur b. En résolvant par la méthode de Gauss, de manière
indépendante, les p systèmes de Cramer dans IR n , on répétera p fois l’essentiel du travail algorithmique
effectué dans cette méthode, et donc p − 1 fois de trop.

b) Solution du problème.
Pour résoudre efficacement les p systèmes de Cramer (6), la bonne approche consiste plutôt à ré-analyser
l’algorithme de la méthode de Gauss écrit précédemment pour résoudre un système de Cramer A.X = b
dans IR n (dans ses 2 phases : Elimination+Résolution). Ceci en vue d’adapter cet algorithme en une nouvelle
version pouvant gérer la résolution simultanée de plusieurs systèmes de même matrice, mais en évitant toute
répétition d’instruction en son sein. Pour y arriver :
1. le vecteur-2nd membre b ∈ IR n est transformé en une matrice b = (bij ) ∈ Mn,p (IR), dans laquelle
sont stockés, en colonnes, les p seconds membres b(1) , · · · , b(p) ∈ IR n , i.e. Cj (b) = b(j) , ∀ j = 1 (1) p.
Cette matrice remplacera le vecteur-2nd membre b comme paramètre dans les en-têtes de procédures ;
2. le vecteur-solution X ∈ IR n devient plutôt une matrice X = (xij ) ∈ Mn,p (IR) dans laquelle seront
stockés les p vecteurs-solutions des p systèmes à résoudre, avec Cj (X) = X(j) , j = 1 (1) p. La matrice
X remplacera l’ancien vecteur-solution X comme paramètre dans toutes les en-têtes de procédures.
3. Pour déclarer le type des nouvelles matrices b et X dans les en-têtes des nouvelles procédures algorith-
miques, on aura préalablement, au début du programme, créé un type matrice2 par les 2 déclarations :
const : p = 15 ; /* N.B. La valeur 15 est juste pour illustration. */
type : matrice2 = tableau [ 1...n, 1...p ] de réels ;
4. Ensuite, dans l’algorithme de la méthode de Gauss écrit précédemment pour résoudre un système de
Cramer A.X = b dans IR n , il faut remplacer toute instruction ou bloc d’instructions portant sur
les coordonnées bi du vecteur b par une boucle Pour j = 1 (1) p faire , boucle effectueant cette
instruction ou bloc d’instructions sur les coordonnées bij de chaque vecteur b(j) , j = 1 (1) p.

⊲ Exercice E10 (Méthode de Gauss pour pluieurs ssytèmes de même matrice)


Avec les considérations ci-dessus :
1◦ ) a) Recenser, dans l’algorithme de la méthode de Gauss (dans ses 2 phases), toutant les instructions
ou blocs d’instructions touchant le 2nd membre b.
b) Pour chacun(e) de ces instructions ou blocs d’instructions, écrire en quoi elle/il doit être trans-
formé(e) pour gérer simultanément les p 2nds membres b(j) , j = 1 (1) p.
2◦ ) Transformer la procédure algorithmique GAUSS en une nouvelle procédure GAUSS MULT
résolvant efficacement les p systèmes de Cramer (6). Ceci sous-entendant évidemment une trans-
formation correspondante de chacune des procédures appelées pendant l’exécution de GAUSS.
RESOLUTION NUMERIQUE DES SYSTEMES LINEAIRES (ND/NG, 23 mai 2017) 19

9◦ ) Une variante de la méthode de Gauss : la méthode de Gauss-Jordan.


a) Mode opératoire.
Pour résoudre un système de Cramer A.X = b dans IR n , cette méthode opère selon les mêmes principes
que celle de Gauss. La différence est que sa phase d’élimination vise plutôt à transformer le système de départ
en un système diagonal équivalent. Une fois cette phase d’élimination terminée, la résoultion du système
s’achève par celle, triviale, de ce système diagonal.
L’essentiel du travail dans la méthode de Gauss-Jordan consiste donc en sa phase d’élimination.

b) Etapes pour l’élimination.


On parcourt séquentiellement les colonnes de la matrice A de la première à la dernière. Et,
pour l’élimination sur chaque colonne k, on effectue successivement les étapes :
1. Recherche et positionnement d’un pivot non nul en position (k, k) dans A (N.B. Ceci se fait exactement
comme dans la méthode de Gauss).
2. Elimination de Gauss-Jordan sur la colonne k, i.e. annulation de tous les coefficients en-dessous et
au-dessus de akk , i.e. tous les aik , pour i = 1 (1) n, i 6= k.
Cependant, on peut montrer qu’on obtient une version légèrement plus efficace de l’algorithme lorsqu’on
intercale entre ces 2 étapes l’étape suivante :
1′. Division de l’équation n◦ k par le pivot akk (après son choix et son positionnemment en (k, k) dans la
matrice A).

Vous aimerez peut-être aussi