Académique Documents
Professionnel Documents
Culture Documents
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
e produit par son exécution sur ordinateur, soit aussi proche que possible du vrai
vecteur X,
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 .
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 ,
nd
au 2 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 :
e
cij = e akj , dei = ebi − ℓik ∗ ebk .
aij − ℓik ∗ e
D’où des erreurs absolues sur les valeurs respectives de cij et di (avant même leur calcul) :
δcij = e
cij − cij = (e
aij − aij ) − ℓik ∗ (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, pour
k = 1 (1) n − 1 : c’est 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 (celle sortie de l’élimination sur 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, certes il pourrait y avoir, amplification des erreurs, mais elle sera bien moindre
que dans le cas précédent. Raisonnement analogue 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
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 ̸= k. En effet, une fois trouvés les indices imax et jmax vérifiant (5) ci-
dessus, si ceux ci sont tels que imax ̸= k et/ou jmax ̸= 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 ̸= k ;
– les colonnes k et jmax de la matrice A, si jmax ̸= 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, 1er juin 2018) 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.
f ) Stratégie du pivot partiel contre stratégie du pivot total : qui gagne le match???
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.
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 .
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 rencontre dans beaucoup d’applications.
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.
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 :
◃ Exercice E9
Coût final exact de la méthode de Gauss pour résoudre un système de Cramer d’ordre n ?
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 ].
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. */
RESOLUTION NUMERIQUE DES SYSTEMES LINEAIRES (ND/NG, 1er juin 2018) 19