106
M´ ethodes directes pour la r´ esolution des syst` emes lin´ eaires
splus=abs(theta(k)-p(k));
sminu=abs(-theta(k)-p(k));
for i=k+1:n
splus=splus+abs(p(i)+U(k,i)*zplus);
sminu=sminu+abs(p(i)+U(k,i)*zminu);
end
if splus >= sminu, z(k)=zplus; else, z(k)=zminu; end
i=[k+1:n]; p(i)=p(i)+U(k,i)*z(k);
end
z = z’;
x = backwardcol(L’,z);
w = forwardcol(L,x);
y = backwardcol(U,w);
k1=norm(A,1)*norm(y,1)/norm(x,1);
return
Exemple 3.7 Consid´ erons la matrice de Hilbert H4. Son conditionnement K1(H4),
calcul´ e en utilisant la fonction invhilb de MATLAB qui renvoie l’inverse exact de
H4, est 2.8375 · 10
4 . Le Programme 14 avec theta=[1,1, 1, 1]
T donne l’estimation
raisonnable
K1(H4) = 2.1523 · 10
4 (la mˆ eme que celle fournie par rcond), tandis que
la fonction condest retourne la valeur exacte.
•
3.11 Am´ eliorer la pr´ ecision de la m´ ethode de Gauss
Si le conditionnement de la matrice du syst` eme est grand, nous avons d´ ej` a
signal´ e que la solution calcul´ ee par la m´ ethode de Gauss peut ˆ etre impr´ ecise,
mˆ eme quand son r´ esidu est petit. Dans cette section, nous indiquons deux
techniques dont le but est d’am´ eliorer le r´ esultat.
3.11.1 Scaling
Quand l’ordre de grandeur des coefficients de A varie beaucoup d’un ´ el´ ement
` a l’autre, on risque d’effectuer, au cours de l’´ elimination, des additions entre
´ el´ ements de tailles tr` es diff´ erentes, entraˆ ınant ainsi des erreurs d’arrondi. Un
rem` ede consiste ` a effectuer un changement d’´ echelle, ou scaling, de la matrice
A avant de proc´ eder ` a l’´ elimination.
Exemple 3.8 Consid´ erons ` a nouveau la matrice A de la Remarque 3.3. En la multipliant `
a droite et `
a gauche par la matrice D=diag(0.0005, 1, 1), on obtient
˜
A = DAD =
⎡
⎣
−0.0001
1
1
1
0 .78125 0
1
0
0
⎤
⎦ .
En appliquant la m´ ethode de Gauss au syst` eme obtenu apr` es scaling ˜
A˜ x = Db =
[0.2, 1.3816, 1.9273]
T , on obtient la solution correcte x = D˜ x.
•
M´ ethodes directes pour la r´ esolution des syst` emes lin´ eaires
splus=abs(theta(k)-p(k));
sminu=abs(-theta(k)-p(k));
for i=k+1:n
splus=splus+abs(p(i)+U(k,i)*zplus);
sminu=sminu+abs(p(i)+U(k,i)*zminu);
end
if splus >= sminu, z(k)=zplus; else, z(k)=zminu; end
i=[k+1:n]; p(i)=p(i)+U(k,i)*z(k);
end
z = z’;
x = backwardcol(L’,z);
w = forwardcol(L,x);
y = backwardcol(U,w);
k1=norm(A,1)*norm(y,1)/norm(x,1);
return
Exemple 3.7 Consid´ erons la matrice de Hilbert H4. Son conditionnement K1(H4),
calcul´ e en utilisant la fonction invhilb de MATLAB qui renvoie l’inverse exact de
H4, est 2.8375 · 10
4 . Le Programme 14 avec theta=[1,1, 1, 1]
T donne l’estimation
raisonnable
K1(H4) = 2.1523 · 10
4 (la mˆ eme que celle fournie par rcond), tandis que
la fonction condest retourne la valeur exacte.
•
3.11 Am´ eliorer la pr´ ecision de la m´ ethode de Gauss
Si le conditionnement de la matrice du syst` eme est grand, nous avons d´ ej` a
signal´ e que la solution calcul´ ee par la m´ ethode de Gauss peut ˆ etre impr´ ecise,
mˆ eme quand son r´ esidu est petit. Dans cette section, nous indiquons deux
techniques dont le but est d’am´ eliorer le r´ esultat.
3.11.1 Scaling
Quand l’ordre de grandeur des coefficients de A varie beaucoup d’un ´ el´ ement
` a l’autre, on risque d’effectuer, au cours de l’´ elimination, des additions entre
´ el´ ements de tailles tr` es diff´ erentes, entraˆ ınant ainsi des erreurs d’arrondi. Un
rem` ede consiste ` a effectuer un changement d’´ echelle, ou scaling, de la matrice
A avant de proc´ eder ` a l’´ elimination.
Exemple 3.8 Consid´ erons ` a nouveau la matrice A de la Remarque 3.3. En la multipliant `
a droite et `
a gauche par la matrice D=diag(0.0005, 1, 1), on obtient
˜
A = DAD =
⎡
⎣
−0.0001
1
1
1
0 .78125 0
1
0
0
⎤
⎦ .
En appliquant la m´ ethode de Gauss au syst` eme obtenu apr` es scaling ˜
A˜ x = Db =
[0.2, 1.3816, 1.9273]
T , on obtient la solution correcte x = D˜ x.
•
