Académique Documents
Professionnel Documents
Culture Documents
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
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.
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 rencontrent 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 :
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
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.