Vous êtes sur la page 1sur 29

ASI 3

Méthodes numériques
pour l’ingénieur
Résolution de systèmes linéaires
par des méthodes directes :
Gauss, LU,
Ax=b : un cas simple
A est une matrice diagonale
problème
 a11 0 0  0   x1   b1 
      solution
 0  0      
 0 0   x  =b  bi

0 aii 0
  i  i xi = , i ∈ [1, n]
aii
   0  0    
 0  0 0 ann   x  b 
  n  n
Algorithme
Fonction x = diago(A,b)
pour i = 1 jusqu' à n
b
xi ← i
aii
fait
A est de forme triangulaire
 a11 0 0  0   x1   b1 
       b1
   0         x1 = a
a  aii 0 0   x  =b  
1

 i1   i  i 1  i −1 
 xi =  bi − ∑ aij x j 
     0       aii  j =1 
a  ani  ann   x  b 
 n1  n  n somme
b1
Fonction x = triang(A,b) x1 ←
a11
pour i = 2 jusqu' à n
somme ← bi
pour j = 1 jusqu' à i − 1
somme ← somme − aij x j
fait
somme
xi ←
aii
fait
Commentaires sur le programme « diago »
• Complexité ?
n
• Déterminant : det( A) = ∏ aii
i =1

• que se passe t’il si A est triangulaire supérieure ?

• Exercice : Quels sont les âges d ’Alice, de Louis, Sacha et Gaspar ?


Sachant que trois fois la somme des âges des garçons est
égale à la somme des âges des filles, que l’âge d’Alice
moins trois fois la somme des âges de Louis et de Sacha
est égal à moins neuf, que trois fois l’âge de Louis est égal
à vingt sept, et que l’âge de Louis moins deux fois l’âge
de Sacha est égal à 3.
Pivot de Gauss
4 principes fondamentaux
On ne change pas la solution lorsque l’on :
1. permute 2 lignes

2. permute 2 colonnes

3. divise par un même terme non nul les éléments d’une ligne

4. ajoute ou retranche à une ligne un certain nombre


de fois une autre ligne

Stratégie : Transformer le système linéaire


en un système équivalent … facile à résoudre
Triangulaire !
Pivot de Gauss : un exemple
2 x1 + 4 x2 − 2 x3 = −6
 x + 3x + x4 = 0
 1 2

3x1 − x2 + x3 + 2 x4 = 8
 − x2 + 2 x3 + x4 = 6
pivot (1)
Pivot de Gauss : un exemple
2 x1 + 4 x2 − 2 x3 = −6
 x + 3x + x4 = 0
 1 2

3x1 − x2 + x3 + 2 x4 = 8
 − x2 + 2 x3 + x4 = 6
(2) = (2)-a21/pivot (1)
Pivot de Gauss : un exemple
2 x1 + 4 x2 − 2 x3 = −6
 x + 3x + x4 = 0
 1 2

3x1 − x2 + x3 + 2 x4 = 8
 − x2 + 2 x3 + x4 = 6
(2) = (2)-a21/pivot (1)

2 x1 + 4 x2 − 2 x3 = −6
 0 + x + x3 + x4 = 3
 2

3x1 − x2 + x3 + 2 x4 = 8
 − x2 + 2 x3 + x4 = 6
Pivot de Gauss : un exemple
2 x1 + 4 x2 − 2 x3 = −6
 x + 3x + x4 = 0
 1 2

3x1 − x2 + x3 + 2 x4 = 8
 − x2 + 2 x3 + x4 = 6
(3) = (3)-a31/pivot (1)

2 x1 + 4 x2 − 2 x3 = −6
 0 + x2 + x3 + x4 = 3


 0 − 7 x2 + 4 x3 + 2 x4 = 17
 − x2 + 2 x3 + x4 = 6

Le première variable à été éliminée de toutes les équations sauf une


L’algorithme du pivot de Gauss
1. Triangularisation
pour k = 1 jusqu' à n − 1
Fonction A,b = descent(A,b) pivot ← akk (* stratégie de pivot *)
si pivot ≠ 0 alors
Ax=b pour i = k + 1 jusqu' à n
aik
bi ← bi − bk
pivot
pour j = k + 1 jusqu' à n
aik
aij ← aij − akj
pivot
fait
fait
sinon " problème"
fait
2. Résolution du système triangulaire
Gauss : résolution d’un système triangulaire
 a11  a1i  a1n   x1   b1 
       bn
 0          xn = a
 0 0 aii  ain   x  =b  
n

   i  i 1  n 
 xi =  bi − ∑ aij x j 
   0        aii  j =i +1


 0  0 0 ann   x  b 
  n  n somme
bn
Fonction x = triang(A,b) xn ←
ann
pour i = n − 1 jusqu' à 1
somme ← bi
pour j = i + 1 jusqu' à n
somme ← somme − aij x j
fait
somme
xi ←
aii
fait
Gauss

Fonction x = Gauss(A,b)

U,c = descent(A,b)

x = triang(U,c)
Remarques
Choix du pivot : minimiser les erreurs d’arrondis
si un pivot est nul, on permute deux lignes
si tous les pivots restant sont nuls la matrice est singulière
(i.e. le système d’équations n’admet pas de solution unique)

pour minimiser les erreurs d’arrondis :


on choisi le plus grand pivot possible (en valeur absolue)
et donc on permute les lignes (voir les colonnes associées)
c’est la stratégie du pivot maximal (partiel (lignes) ou total)

Comment inverser une matrice ?


Avec l’algorithme de gauss on peu résoudre directement
Ax = b et Ay = c
Az = [b; c ] et donc : AA−1 = I

déterminant d’une matrice = produit des pivots


Exemple
10 −4 1 1
  x =  
 1 1  2
Trouver x en ne gardant que 4 chiffres significatifs après la virgule

10 −4 1   1 
pivot : 10 −4 ,  x = 
−4  −4 
 0 1 − 10   2 − 10 

représentation : ± 0.dddd 10e


10 −4 1   1  0
 x = 
4 4⇔ x= 
 0 − 10   − 10  1

Que se passe t’il si on prend le système à l’envers...


Exemple
10 −4 1 1
  x =  
 1 1  2
Trouver x en ne gardant que 4 chiffres significatifs après la virgule

10 −4 1   1 
pivot : 10 −4 ,  x = 
4 4
 0 1 − 10   2 − 10 

représentation : ± 0.dddd 10e


10 −4 1   1  0
 x = 
4 4⇔ x= 
 0 − 10   − 10  1

Que se passe t’il si on prend le système à l’envers...


Représentation matricielle de
l’élimination de Gauss
Ax = b ⇒ Ux = c
on recherche la matrice L telle que :
A = LU et b = Lc

A chaque étape de l’algorithme...

 ( k +1) a (k )

 ij
a ← a (k )
ij − ik
a (k )
( k ) kj
pour j = k + 1,..., n
 akk
pour i = k + 1,..., n  (k )
a
b ( k +1) ← b ( k ) − ik b ( k )
 i i (k ) k
akk
matriciellement : A( k +1) = M ( k ) A( k ) ; b ( k +1) = M ( k )b ( k ) ;
Les cas du second membre b
b1( k +1) ← b1( k ) mik = −
aik
;
 ( k +1) akk
bk ← bk( k )
(k ) 1 0 0  0
a  
bk( k+1+1) ← bk( k+1) − k (+k1,)k bk( k )  0 M(k)
1 0  0
akk ?
 (k ) M (k ) = 0 0 1  
a
bi( k +1) ← bi( k ) − ik( k ) bk( k )  
akk    mk +1,k  0
 0 0 m
a (k )
 0 1 
bn( k +1) ← bn( k ) − nk (k ) n,k
(k ) k
b
akk
matriciellement : b ( k +1) = M ( k )b ( k ) ;
Les cas du second membre b
b1( k +1) ← b1( k ) mik = −
aik
;
 ( k +1) akk
bk ← bk( k )
(k ) 1 0 0  0
a  
bk( k+1+1) ← bk( k+1) − k (+k1,)k bk( k ) 0 1 0  0
akk
 (k ) M (k ) = 0 0 1  
a
bi( k +1) ← bi( k ) − ik( k ) bk( k )  
akk    mk +1,k  0
 0 0 m
a (k )
 0 1 
bn( k +1) ← bn( k ) − nk (k ) n,k
(k ) k
b
akk
matriciellement : b ( k +1) = M ( k )b ( k ) ;
Factorisation
matriciellement : A( k +1) = M ( k ) A( k ) ; b ( k +1) = M ( k )b ( k ) ;
1 0 0  0
 
0 1 0  0
aik
mik = − ; M (k ) = 0 0 1  
akk  
   mk +1,k  0
0 0 m 0 1 
 n ,k

U = A( n ) = M ( n −1) A( n −1)
= M ( n −1) M ( n −2) A( n −2)
( n −1) ( n−2)
=M M
 ...M ( 2)
M (1)
A
M
= M A ⇔ A = M −1U
en posant L = M −1 on a A = LU
LU : motivation
On connaît la matrice A

on ne connaît pas encore b

comment « préparer A » ?
LU : principe
Il est si facile le résoudre un système « triangulaire » !
A = LU
 (1) Ly = b
Ax = b ⇔ 
(2) Ux = y

U
0
Comment construire Let U ?
idée :
0 reprendre l’étape de triangularisation
A de la méthode de Gauss
L
De Gauss à LU
Représentons une étape de la triangularisation
par la multiplication de A par une matrice M(k)
A( k +1) = M ( k ) A( k ) A(1) = A et A( n ) = U
aik
 i ,k = = − mi ,k
akk
 aik
 bi ← bi − a bk 1  0  0

kk  
a 0    
aij ← aij − ik akj
 akk M (k ) =  0 0 1  0
 
gauss   −  k +1,k  
0  −  n ,k 0 1 

( n −1)
U =M ...M ...M A = MA
(k ) (1)

A = M −1U = LU
donc L = M −1
LU : la décomposition
Les matrices élémentaires M(k) sont inversibles
et leurs inverses sont les matrices L(k) triangulaires inférieures
telles que :
 lij = 0

L( k ) = sauf lii = 1 i = 1, n (
L( k ) = I − M ( k ) − I )
sauf l =  i = k + 1,n
 ik ik

1  0  0 1  0  0
   
0        
0
M (k ) = 0 0 1  0 L( k ) = 0 0 1  0
   
  −  k +1,k      k +1,k  
0  −  n ,k 0 1  0
    n ,k 0 1 

L = L( n−1) ...L( k ) ...L(1) C’est la matrice lik


L’algorithme de décomposition
Fonction L,U = décompose(A)
pour k = 1 jusqu' à n − 1
pivot ← akk (* stratégie de pivot *)
si pivot ≠ 0 alors
 kk ← 1
pour i = k + 1 jusqu' à n
aik
 ik ←
pivot
pour j = k + 1 jusqu' à n
aij ← aij −  ik akj
fait
fait
fait sinon " problème"
Exemple
Montrez que :

 1 2 1  1  1 2

1

 
 2 2 1 =  2 1  − 2 − 1
 1 1 1  1 1 1  1 

   2  2 
LU : l’algorithme

Fonction x = LU(A,b)

L,U = decompose(A)

y = triang(L,b)

x = triang(U,y)
A=LU
Théorème : Si au cours de l’élimination de Gauss sur la matrice A,
les pivots sont non nuls,
alors il existe une matrice triangulaire inférieure L
et une matrice triangulaire supérieure U, telle que :
A = LU
si de plus on impose à L d’avoir les éléments diagonaux
égaux à un
alors la factorisation est unique
Démonstration : (éléments) U = M ( n −1) ...M ( k ) ...M (1) A = MA
A = M −1U = LU
unicité : par l’absurde

Remarque : (déterminent) n n
det( A) = det( LU ) = det( L) det(U ) = det(U ) = ∏ uii =∏ pivot i
i =1 i =1
A=LU
Théorème : Si au cours de l’élimination de Gauss sur la matrice A,
les pivots sont non nuls,
alors il existe une matrice triangulaire inférieure L
et une matrice triangulaire supérieure U, telle que :
A = LU
si de plus on impose à L d’avoir les éléments diagonaux
égaux à un
alors la factorisation est unique
Contre exemple trivial :
0 2
A= 
1 1
Réorganisation du système linéaire :
permutation des lignes et des colonnes
RECHERCHE DU MEILLEUR PIVOT
La factorisation
PA=LU
Définition : Si la matrice A, est non singulière
alors il existe une matrice de permutation P
telle que les pivots de PA sont non nuls. (TL chapitre 4)

Si akk est égal à zéro,


on échange (permute) deux lignes
Fonction x = LU(A,b)
L,U,P = decompose(A)
PA = LU
 (1) Ly = Pb y = triang(L,P*b)
Ax = b ⇔ 
(2) Ux = y
x = triang(U,y)
Matlab !

Vous aimerez peut-être aussi