Académique Documents
Professionnel Documents
Culture Documents
1-Introduction : Matrice triangulaire infrieure l11 l l 21 22 L= M O l n1 L l n n lij = 0 pour j f i suprieure u11 u12 K u22 u23 U = O u1n u2 n M unn
uij = 0 pour i f j
n
et
Ax = b
4 x3 = 8 x3 =
8 4
3 x2 2 x3 = 1 x2 =
1 [1 + 2 x3 ]=1 3 1 [9 x2 2 x3 ]= 2 2 x1 + x2 + 2 x3 = 9 x1 = 2
for
i = n 1 , 1 s = bi for j = i + 1 ,K , n s = s ui j x j
end xi = s / ui i end
Dans le cas dune matrice triangulaire infrieure, la rsolution du systme est obtenue par :
x1 = si / l 11 end
*On dsigne par flop une opration lmentaire virgule flottante (+,-,*,/)
Exemple : rsoudre A x = b
3 2 1 A= 6 6 7 3 4 4
avec
1 b = 7 6
Lalgorithme de substitution de Gauss transforme le systme original en : ~ Ux = b avec U une matrice triangulaire suprieure. Utilisons le processus pour liminer la premire variable :
3 x1 + 2 x2 1 x3 = b1 x1 =
6 x1 6 x 2 + 7 x3 = b2
1 (b1 2 x2 + x3 ) 3
1 6 (b1 2 x2 + x3 ) 6 x2 + 7 x3 = b2 3 1 3 (b1 2 x2 + x3 ) 4 x2 + 4 x3 = b3 3
3 x1 4 x2 + 4 x3 = b3
2 2
1 5 3
1 et b1 = 9 7
2 0
1 5 2
1 et b 2 = 9 +2
On voit bien quon trouve un systme linaire avec une matrice triangulaire suprieure qui peut tre rsolu avec lalgorithme de substitution rtrograde.
mki =
aki est le multiplicateur de la ligne k et aii est le pivot de la variable xi , il doit tre non nul. aii
la fin, on trouve une matrice triangulaire suprieure. Loprateur \ de MATLAB utilise une version robuste de llimination de Gauss.
3- Mthode de factorisation LU
Lalgorithme qui sera dvelopp est une amlioration de lalgorithme dlimination de Gauss. Revenons lexemple de dpart :
3 A= 6 3 2 6 4 1 7 4 1 b = 7 6
inchange
0 en dessous de la diagonale
Ainsi, pour liminer la i me variable mettre des 0 dans la i me colonne partir de la ligne i + 1. Il suffit juste de calculer les termes akj pour k et j = i + 1,...n
Et soit le produit :
0 1 m M 1 A = 21 1 m31 0 a11 = a21 m21 a11 a31 m31 a11 0 0 1 a12 a22 m21 a12 a32 m31 a12 a11 a 21 a31 a12 a22 a32 a13 a13 a23 a33 a23 m21 a13 a23 m31 a13
nous vrifions que : a a21 m21 a11 = a21 21 a11 = 0 a11 a31 a11 = 0 a11 Ainsi, le processus dlimination de la premire variable est obtenu par la multiplication de A par M1. a31 m31 a11 = a31
La matrice triangulaire suprieure U est donc : U = M (n 1) M (n 2 ) ... M (2 ) M (1) A On veut obtenir la matrice triangulaire infrieure L :
M (n2 ) L O M (2 ) M (1) A = M (n11) U
0 1 0
0 0 1
En effet :
1 M 111 M 1 = m21 m31
0 1 0 0 0 1 0 1 m 21 1 m31 0 0 1 0 = 0 1 0 0 1 0 0 0 1
0 1 0
0 0 1
1 0 0
0 1 m32
l ii = 1 l ki = mki
, k = i + 1,.., n
Algorithme de factorisation LU
l 32 l 42
a11 a14 l a24 21 l 31 a34 a44 l 32 a14 a11 l u24 21 l 31 u34 a11 l 32 44
a12 u22
1 a32
a13 u23
1 a33
a1 42 a12 u22
l 32 l 42
l 43
Algorithme de factorisation LU
REMARQUES IMPORTANTES:
A la i-ime tape de la mthode, on a : n - i divisions pour le calcul des multiplicateurs ( i = 1,.., n 1 ) (n - i ) 2 soustractions et multiplications (pour k , j = i + 1,.., n )
(n i) + 2(n i)2 = k + 2k 2 =
i =1 k =1
n 1
n 1
Une permutation des lignes peut tre utilise pour viter des pivots nuls (pivotement partiel). Si P est la matrice de permutation, le systme original est transform en PA x = Pb . Remarquez que lordre des variables xi est inchang. Il est aussi possible de permuter des colonnes et des lignes pour avoir le plus grand pivot (pivotement complet). Toute permutation doit prserver la solution du systme original. En pratique, il est plus simple de programmer (et suffisant) la permutation des lignes. Dans Matlab, on peut calculer la factorisation dune matrice A par la commande >> [L,U,P]= lu(A); La matrice P est la matrice de permutation. Lorsque la matrice P concide avec la matrice identit, les matrices L et U sont les matrices recherches (telles que LU= A) autrement LU= P A Une fois la factorisation LU obtenue, on peut rsoudre facilement le systme et faible cot (comparativement la mthode de Gauss) aprs la substitution rtrograde, et ce pour diffrents vecteurs seconds membres b cest le cas par exemple en dynamique des systmes linaires. (voir exemple dutilisation de la factorisation LU par Matlab la page suivante)
10
4- Analyse de la prcision de la solution de la mthode dlimination de Gauss et sensibilit par rapport aux donnes :
*)
n A = A 1 = ma x ai j i =1 1 j n
A = A
**)
n = max ai j j =1 1 i n
***)
A = A 2 = max
x 0
Ax x
(= max , pour une matrice symtrique dfinie positive = max , avec les valeurs propres de AT A)
= max et
do
min
A =
( A) = A1
max min
_________________________________________________________________________
et soit b une perturbation de b due aux erreurs de troncature ou aux imprcisions dans les donnes du problmes physiques. La solution du systme sera perturbe de xb tel que :
A( x + xb ) = b + b A xb = b
xb A1
b
x
comme A x = b b A
11
do
xb
x
A1
b
b
Si la perturbation sur les donnes est petite alors lerreur sur la solution est petite condition que le nombre A A 1 ne tende pas vers linfini. Pour une matrice mal conditionne (i.e. presque singulire) le facteur A grand.
tudions la sensibilit par rapport aux variations des coefficients de la matrice A. La solution perturbe satisfait : ( A + A) ( x + xA ) = b avec A x = b ce qui donne
A xA + A ( x + xA ) = 0 ou encore
xA = A1 A ( x + xA ) .
valuons maintenons la norme de la perturbation :
xA A1 x + xA
A = A1
A
A A <<. Donc, si la perturbation sur la matrice
A
A
< <1
xA
x + xA
<<1 .
conditionnement.
Effet des perturbations simultanes de b et de A : On peut avoir des perturbations de la matrice et du vecteur second membre dues par exemples aux erreurs darrondis lors de la factorisation ou aux imprcisions sur le modles physique/mathmatique, dans ce cas on peut montrer que :
12
x x + x
A b + A A b 1 ( A) A
k ( A)
2 1 Exemple : A = avec 0 2 + 1 detA = 2 ( 2 + ) = A est singulire si = 0 . On peut calculer : A 1 = 4 + . Dautre part : 1 1 + 1 3 1 A 1 = do A 1 = +1 2 + 2 Ainsi, le nombre de conditionnement de la matrice est :
( A ) = + 1 ( 4 + ) = + 7 + On voit que : ( A ) si 0
Calculons ( A ) selon la norme A 2 : Les valeurs propres correspondent : det( AT A I ) = 0 Si 0 alors ( A ) dans ce cas la matrice est mal conditionne Calcul du conditionnement par Matlab : Cond (A) Rpondre
12
Ax = b
1+ b= 2
1 avec b = 2
Exemple :
K ( A) est une proprit de la matrice
Si K ( A) est grand, la solution x est sensible aux donnes (b et A). Pour un K ( A) donn, un algorithme peut tre plus ou moins sensible aux erreurs darrondis.
13
Stabilit de lalgorithme de factorisation: Soit le vecteur rsidu : r = b A , tant la solution numrique obtenue par lalgorithme de x x Gauss avec pivotement et substitution rtrograde La solution est exacte si le rsidu est parfaitement nul. Or, cause des erreurs darrondis il va rester un rsidu r. Si x est la solution exacte, alors lanalyse thorique donne :
x x r : erreur relative ( A ) x b r
ainsi,
petit ne garantit pas une ncessairement bonne solution, cela dpend du b conditionnement.
Rgles du pouce :
* Llimination de Gauss avec le pivotement partiel pour le systme Ax = b donne une solution dont le rsidu est petit mme si ( A ) est lev. ** Si A et b sont stocks la prcision m , la solution numrique pour Ax = b pour nimporte quelle variante de llimination de Gauss est prcise d chiffres significatifs d = log10 ( m ) log10 ( ( A)) .
alors d = 6 4 = 2 il reste quand-mme 2 chiffres exemple : si n =1016 et ( A ) =1014 significatifs lorsquon travaille en double prcision avec une matrice trs mal conditionne! Preuve :
(A + E ) = b x
A b = r = E E x x
E tant la matrice derreur produite par lalgorithme de Gauss. Un rsultat empirique suggre quen pratique: E m A .
r m A
tout de mme.
14
x x x
A b + A A b 1 K ( A) A
K ( A)
Si les perturbations sont commises par les erreurs darrondis dans le stockage des coefficients, ( A) = m A et b = m b
x
x + x
2 m K ( A) ~ 2 m K ( A) en supposant ( A ) 1 K ( A) m
Boucle :
j =1
15
Exemple : 5 x1 x2 + 2 x3 = 1 2 x1 + x2 + 7 x3 = 32 2 x1 + 6 x2 3x3 = 2
Ce systme nest pas forte dominance diagonale, mais si on interchange les lignes (2) et (3) alors il respecte la condition. Dans ce cas, lalgorithme de Jacobi converge.
Lalgorithme Jacobi peut tre amlior en termes de mmoire et de convergence en utilisant lalgorithme Gauss-Seidel :
i 1 n bi aij x (j k +1 ) aij xi( k ) j =1 j = i +1
xi( k +1 ) =
1 aii
nouvelles valeurs
anciennes valeurs
Cet algorithme converge pour nimporte quel estim initial dans le cas de matrice forte dominance diagonale et pour les matrices symtriques dfinies positives.
( D + L ) x( k +1 ) = b Ux ( k ) ou encore x( k +1 ) = ( D + L )1 Ux( k ) + ( D + L )1 b
16
( D + L ) ( x ( k +1 ) x ( k ) ) = b ( D + L + U ) x ( k ) = b Ax ( k )
P x( k ) = r ( k ) et x( k +1 ) = x( k ) + x( k )
La mthode de Jacobi scrit aussi sous la forme ci-dessus avec P =D; ou encore
x ( k +1 ) = Bx ( k ) + y avec B = D 1 ( A D ) y = D 1 b
Avec B la matrice ditration. Pour lalgorithme de Gauss-Seidel la matrice ditration est B = ( D + L )1U
Si
est
la
solution
exacte
et
si
lalgorithme
est
convergeant,
alors
b = A1 x et lim x ( k ) = x k
Comme:
x( k +1 ) = Bx( k ) + y x = Bx + y
do :
eo
max
17
0 a = 21 a22 a n1 ann
a12 a11 0
an 2 ann
b
j =1
ij
x j = xi
i = 1, K , n
avec x le vecteur propre associ qui peut tre construit de telle faon que : x i = 1 et x j 1
b
j =1 n
ij
x j = xi
b
j =1
ij
x j bij
j =1
Ainsi, si
b
j =1
ij
< 1 alors max < 1 , ce qui est le cas des matrices forte dominance diagonale.
Mthode du gradient :
Revenons la construction de la solution par la mthode de Jacobi ou Gauss-Seidel. On a vu que la solution litration ( k + 1 ) dpend de la matrice P (matrice de pr-conditionnement) et du rsidu r ( k ) : x ( k + 1 ) = x ( k ) + P 1 r ( k )
Plus gnralement, on peut aussi considrer lalgorithme, avec P une matrice de prconditionnement choisir de telle faon que P-1 soit facile obtenir:
18
x ( k +1) = x ( k ) + k P 1 r ( k ) et k est un coefficient qui permet dacclrer la convergence. Pour obtenir le coefficient optimal on pose la fonctionnelle dite de lnergie associe au systme: f ( x ) = Si A est symtrique, alors f ( x) (dit le Hessien de A). Cherchons le coefficient k et la direction d ( k ) qui garantissent que la fonctionnelle dcrot au fil des itrations: f ( x( k +1 ) ) f x k . Or, en dveloppant lexpression de la fonction on trouve: f ( x ( k +1) ) = f ( x k ) + k f ' ( xk ) d k + 1 x Ax x b . 2 f '' ( x) = A
( )
k2
2
d k f ''( xk ) d k
On a un problme de minimisation (i.e. fonction convexe) si : ( k ) = Ce qui est le cas si A est dfinie positive.
k2
2
d k f ''( xk ) d k 0 .
Dautre part, la condition de dcroissance de la fonction au cours des itrations f ( x ( k +1) ) f ( x k ) est garantie pour k petit si : f ' ( x ( k ) ) d ( k ) < 0 . Or : f '( x k ) = A x ( k ) b = r ( k ) et en posant d k = P 1 r k . Il suffit alors que P 1 soit dfinie positive pour satisfaire cette condition. Cherchons maintenant le coefficient k optimal. Cest--dire on va fixer d ( k ) et on va faire varier
k tel que : f ( x( k +1 ) ) f ( x( k ) ) .
Cela revient chercher qui minimise la fonction f ( x ( k ) + d ( k ) ) = g ( ) . Or, loptimum on a : g ' ( ) = f ' ( x ( k +1) ) d k = 0 On a vu que : f ' ( x ( k +1) ) = Ax ( k +1) b = Ax k + k Ad k b f ' ( x ( k +1) ) d k = Ax k d k + k d k Ad k b d k = 0 ( Ax b) d k rk d k k = k = k d Ad k d Ad k 19
Algorithme du Gradient :
k =
% % Resolution d'un systeme linaire par des algorithmes iteratifs % clc; clear all; %exemple de systeme: matrice definie positive (a diagonale dominante) A= [2 -1 0 0 ; -1 2 -1 0 ; 0 -1 2 -1 ; 0 0 -1 2];
20
b=[-1 0 0 -2 ]; %dimension de la matrice n=4; % Algorithmes 'Jacobi' [x,iter]= jacobi(A,b,n) 'Gauss-seidel' [x,iter]= seidel(A,b,n) 'Gradient: acceleration de Gauss-seidel' [x,iter]= gradient(A,b,n) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [x,iter]= jacobi(A,b,n); NITER= 100; eps= 0.0001; %initialisation x(1:n)=0.0; for iter=1:NITER for i=1:n; s=0.0; for j=1:n; if(i~=j) s= s-A(i,j)*x(j); end end x2(i)= (b(i)+s)/A(i,i); end norm= sqrt((x2-x)*(x2-x)'); if(norm <= eps) x= x2; return else x=x2; end end end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [x,iter]= seidel(A,b,n); NITER= 100; eps= 0.0001; %initialisation x(1:n)=0.0; for iter=1:NITER xold= x; for i=1:n; s=0.0; for j=1:n; if(i~=j) s= s-A(i,j)*x(j); end end x(i)= (b(i)+s)/A(i,i);
21
end norm= sqrt((x-xold)*(x-xold)'); if(norm <= eps) return else end end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [x,iter]= gradient(A,b,n); NITER= 100; eps= 0.0001; %initialisation x(1:n)=0.0; for iter=1:NITER xold= x; for i=1:n; s=0.0; for j=1:n; if(i~=j) s= s-A(i,j)*x(j); end end x(i)= (b(i)+s)/A(i,i); end % le vecteur de direction delx= x-xold; % le vecteur residu r= b'- A*x'; %Calcul du coefficient alpha num= delx*r; denom= delx*(A*delx'); alpha= num/denom; %mise jour de la solution x= xold+ alpha*delx; %test de convergence norm= sqrt((x-xold)*(x-xold)'); if(norm <= eps) return else end end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ans =
22
Jacobi x= -1.1999 -1.3998 -1.5998 -1.7998 iter = 42 ans = Gauss-seidel x= -1.1999 -1.3999 -1.5999 -1.8000 iter = 24 ans = Gradient: acceleration de Gauss-seidel x= -1.2000 -1.4000 -1.6000 -1.8000 iter = 18 >>
Dans le cas o A est symtrique et P-1 positive un autre algorithme plus rapide est celui du gradient conjugu. Posons comme avant :
23
r k = b Ax k z k = P 1 r k rk d k d k Ad k x k +1 = x k + k d k
k =
Ce qui donne : r k +1 = r k k Ad k . On construit la nouvelle direction par : d k +1 = P 1r k +1 + k d k = z k +1 + k d k . Pour obtenir k on pose la condition que les directions sont A-orthogonales ou conjugues, cest--dire: d i . A d j = 0 pour i j . Ainsi, d k +1 . A d k = z k+1. Ad k + k d k . Ad k = 0 Ce qui donne :
k =
z k +1 Ad k d k Ad k
On peut prouver facilement que: r k +1.d k = 0 . En effet : r k +1.d k = (r k k Ad k ).d k = r k .d k k Ad k .d k = r k .d k r k .d k = 0 Ce qui donne : r k +1.d k +1 = r k +1.( z k +1 + k d k ) = r k +1.z k +1 Le dnominateur dans lexpression de k peut tre transform en :
d k Ad k = rk d k
rk zk
k =
z k +1 (r k +1 r k ) zk rk
24
k =
r k +1 = r k k Ad k
On montre que :
d k +1 = z k +1 + k ( z k + k 1d k 1 ) = i zi
i =0 k +1
Les directions sont alors des combinaisons linaires des vecteurs z i . Dautre part
z k = d k k d k 1 ce qui prouve que d k +1est une combinaison linaire des vecteurs ( P 1 A)i .z 0 pour i = 0,..., k + 1. Ce qui veut dire que les directions successives sont combinaisons linaires des vecteurs z 0 , P 1 Az 0 , ( P 1 A) 2 z 0 ,.... qui forment le sous-espace de Krylov. Cela implique quaprs n directions on obtient la solution exacte (en faisant abstraction aux erreurs darrondis)!
25
26
27
28
29
30