5.3 Factorisation LU
143
obtenue avec les commandes sparse ou spdiags) et choisit l’algorithme sparse
spdiags
le mieux adapté.
Remarque 5.2 (Calculer un déterminant) La factorisation LU permet
de calculer le déterminant de A avec environ O(n
3 ) opérations. Il suffit pour
cela de remarquer que (voir Section 1.4)
det(A) = det(L) det(U) =
n
k=1
ukk.
C’est effectivement cette méthode qui est à la base de la commande MATLAB
command det.
Dans le Programme 5.1, on propose une implémentation de l’algorithme (5.13). Le facteur L est stocké dans la partie (strictement) triangulaire inférieure de A et U dans la partie triangulaire supérieure (ceci
afin d’économiser de la mémoire). Après l’exécution du programme, on
peut récupérer les deux facteurs L et U en écrivant simplement : L =
eye(n) + tril(A,-1) et U = triu(A), où n est la taille de A.
Programme 5.1. lugauss : factorisation de Gauss
function A= lugauss (A )
% LUGAUSS F a c t o risa tio n LU sans pivot .
% A = LUGAUSS (A ) stocke une matrice t r i a ngul aire
% s u p ér ieure dans la partie t r i an gula ire s u p é rie ure de
% A et une matrice t r i a ngul aire i n f ér ieure dans la
% partie s t r i ct ement t r i a ngul aire i n f ér ieure A ( les
% termes d i a g onaux de L valant 1).
[n , m ]= size ( A );
if n ~= m
error ( ’A n ’’ est pas une matrice carrée ’ );
else
for k = 1:n -1
for i = k+1:n
A(i , k) = A (i , k )/A (k ,k );
if A (k ,k ) == 0 , error ( ’ Elément diagonal nul ’ ); end
j = [k +1:n ]; A(i , j) = A (i ,j ) - A (i ,k )* A(k , j );
end
end
end
return
Exemple 5.5 Calculons la solution du système rencontré dans le Problème
5.1 en utilisant la factorisation LU, puis en appliquant les algorithmes de
descente et remontée. Pour cela, on calcule la matrice A et le second membre
b et on exécute les instructions suivantes :
A = lugauss (A );
y (1)= b (1);
for i =2:4; y =[y ; b (i ) -A(i ,1:i -1)* y (1:i -1)]; end
x (4)= y (4)/ A (4 ,4);
for i =3: -1:1;
x (i )=(y (i ) -A (i ,i +1:4)* x( i +1:4) ’)/ A(i , i );
end
143
obtenue avec les commandes sparse ou spdiags) et choisit l’algorithme sparse
spdiags
le mieux adapté.
Remarque 5.2 (Calculer un déterminant) La factorisation LU permet
de calculer le déterminant de A avec environ O(n
3 ) opérations. Il suffit pour
cela de remarquer que (voir Section 1.4)
det(A) = det(L) det(U) =
n
k=1
ukk.
C’est effectivement cette méthode qui est à la base de la commande MATLAB
command det.
Dans le Programme 5.1, on propose une implémentation de l’algorithme (5.13). Le facteur L est stocké dans la partie (strictement) triangulaire inférieure de A et U dans la partie triangulaire supérieure (ceci
afin d’économiser de la mémoire). Après l’exécution du programme, on
peut récupérer les deux facteurs L et U en écrivant simplement : L =
eye(n) + tril(A,-1) et U = triu(A), où n est la taille de A.
Programme 5.1. lugauss : factorisation de Gauss
function A= lugauss (A )
% LUGAUSS F a c t o risa tio n LU sans pivot .
% A = LUGAUSS (A ) stocke une matrice t r i a ngul aire
% s u p ér ieure dans la partie t r i an gula ire s u p é rie ure de
% A et une matrice t r i a ngul aire i n f ér ieure dans la
% partie s t r i ct ement t r i a ngul aire i n f ér ieure A ( les
% termes d i a g onaux de L valant 1).
[n , m ]= size ( A );
if n ~= m
error ( ’A n ’’ est pas une matrice carrée ’ );
else
for k = 1:n -1
for i = k+1:n
A(i , k) = A (i , k )/A (k ,k );
if A (k ,k ) == 0 , error ( ’ Elément diagonal nul ’ ); end
j = [k +1:n ]; A(i , j) = A (i ,j ) - A (i ,k )* A(k , j );
end
end
end
return
Exemple 5.5 Calculons la solution du système rencontré dans le Problème
5.1 en utilisant la factorisation LU, puis en appliquant les algorithmes de
descente et remontée. Pour cela, on calcule la matrice A et le second membre
b et on exécute les instructions suivantes :
A = lugauss (A );
y (1)= b (1);
for i =2:4; y =[y ; b (i ) -A(i ,1:i -1)* y (1:i -1)]; end
x (4)= y (4)/ A (4 ,4);
for i =3: -1:1;
x (i )=(y (i ) -A (i ,i +1:4)* x( i +1:4) ’)/ A(i , i );
end
