INFO-F-205: Calcul formel et numérique TP 9: Résolution de

Transcription

INFO-F-205: Calcul formel et numérique TP 9: Résolution de
INFO-F-205: Calcul formel et numérique
TP 9: Résolution de systèmes linéaires
1. Résoudre le système Ax = b, avec

4
 3
A=
 2
1
3
4
3
2
2
3
4
3

1
2 

3 
4


1
 1 

et b = 
 −1  .
−1
en utilisant d’abord l’opérateur \ de Matlab .
2. Écrire une fonction backsub(A,B) en Matlab qui résout un système d’équations triangulaire supérieur Ax = b par la méthode de substitution directe. Tout d’abord, calculer xN = bN /AN N et
ensuite, utiliser la règle
PN
bk − j=k+1 akj xj
xk =
pour k = N − 1, N − 2, ..., 1.
akk
3. Trouver des matrices P , L et U telles
et P A = LU en utilisant Matlab . A

2x1 −



x1 −
 3x1 +


x1 +
que L est triangulaire inférieure, U triangulaire supérieure
est la matrice des coefficients du système suivant :
3x2
x2
2x2
x2
+
+
+
−
2x3
x3
2x3
3x3
+
+
+
−
5x4
2x4
x4
x4
= 3
= 1
= 0
= 0
4. Ecrire une fonction Doolittle(A) en Matlab qui renvoie les matrices L et U obtenues à partir de
la matrice A par la méthode de Doolittle. Vérifier le bon fonctionnement de votre fonction avec la
matrice de l’exercice précédent.
Pour rappel, la méthode de Doolittle : on pose lkk = 1. Ensuite, pour pour k = 1, . . . , n on calcule
d’abord la k-ième ligne de U , puis la k-ième colonne de L, selon les formules :
ukj = akj −
k−1
X
lkr urj , j = k, . . . , n,
r=1
lik
k−1
X
1 =
aik −
lir urk , i = k + 1, . . . , n.
ukk
r=1
5. Pour une solution approchée x∗
e = x − x∗
r = b − Ax∗ = b − A(x − e) = Ae
Posant x∗ = x(0) , on peut effectuer un raffinement itératif
 (i)
 r = b − Ax(i)
kek
< tol
jusqu’à
Ae = r(i)
 (i+1)
k
x(i) k
x
= x(i) + e
Si le système n’est pas trop mal conditionné, le
Pour le système suivant :


 
5 7
6
5
x1
 7 10 8

 
7 

  x2  
 6 8 10 9   x3  = 
5 7
9 10
x4
1
raffinement itératif converge très rapidement.

23
32 

33 
31


1
 1 

la solution est x = 
 1 
1
Calculer à partir de

x∗ = x(0)

0.9881
 1.0073 

=
 1.0028 
0.9983
la valeur de x(1) en utilisant Matlab .
6. Pour le système
1.2969
A=
0.2161
0.8648
0.1441
et b =
0.8642
0.1440
et la solution approchée x∗ =
0.9911
0.4870
– Comparer x∗ au résultat exact du système
– Calculer le résidu r = b − Ax∗ . Que peut-on en conclure à propos du résidu ?
7. Considérons le système Ax = b où

10
A =  −2
−2
−2
10
−5

1
−2 
10


9
et b =  12 
18
dont la solution exacte est x = (1, 2, 3)t .
En utilisant les scripts jacobi.m et gseid.m de la figure 1 et 2 (disponibles sur la page web du
cours) :
(a) Déterminer une solution approchée du système par la méthode de Jacobi ; calculer trois itérations en partant du vecteur initial x(0) = (0, 0, 0)t .
(b) Idem mais avec la méthode de Gauss-Seidel.
Que peut-on conclure ?
8. En utilisant le script Matlab implantant la méthode de Jacobi qui vous a été fourni, résoudre,
avec une précision de 0.000005, le système d’équations Ax = b où les éléments de A sont
aii
aij
= −4 et
= 2 si |i − j| = 1
= 0 si [i − j| ≥ 2 où i, j = 1, 2, . . . , 10
et
bT = [2 3 4 . . . 11]
Vérifier votre résultat en utilisant l’opérateur \ de Matlab .
9. Le fait qu’une matrice A soit à diagonale dominante stricte, c.-à-d. que
|akk | >
N
X
|akj |
j=1
j 6= k
pour k = 1, 2, . . . , N . est une condition suffisante mais pas nécessaire pour déterminer si la méthode
de Jacobi va converger. A partir de différents vecteurs initiaux P0 , calculer des solutions approchées
pour le système suivant :

+ z = 2
 x
−x + y
= 0

x + 2y − 3z = 0
en utilisant d’abord la méthode de Jacobi, ensuite celle de Gauss-Seidel. Conseil : augmenter
progressivement le nombre d’itérations. Que constate-t-on ?
2
function X=jacobi(A,B,P,delta,max1)
% Input -A is an N x N nonsingular matrix
%
-B is an N x 1 matrix
%
-P is an N x 1 matrix; the initial guess
%
-delta is the tolerance for P
%
-max1 is the maximum number of iterations
% Output-X is an N x 1 matrix : the jacobi approximation to
%
the solutions of AX= B
N= length(B);
for k=1:max1
for j=1:N
X(j)=(B(j)-A(j,[1:j-1,j+1:N])*P([1:j-1,j+1:N]))/A(j,j);
end
err=abs(norm(X’-P));
relerr=err/(norm(X)+eps);
P=X’;
if (err<delta)|(relerr<delta)
break
end
end
X=X’;
Figure 1 – Code Matlab implémetant la méthode de Jacobi
3
function X=gseid(A,B,P,delta,max1)
% Input -A is an N x N nonsingular matrix
%
-B is an N x 1 matrix
%
-P is an N x 1 matrix; the initial guess
%
-delta is the tolerance for P
%
-max1 is the maximum number of iterations
% Output-X is an N x 1 matrix : the jacobi approximation to
%
the solutions of AX= B
N= length(B);
for k=1:max1
for j=1:N
if j==1
X(1)=(B(1)-A(1,2:N)*P(2:N))/A(1,1);
elseif j==N
X(N)=(B(N)-A(N,1:N-1)*(X(1:N-1))’)/A(N,N);
else
% X contains th kth approximations and P th (k-1)st
X(j)=(B(j)-A(j,1:j-1)*X(1:j-1)-A(j,j+1:N)*P(j+1:N))/A(j,j);
end
end
err=abs(norm(X’-P));
relerr=err/(norm(X)+eps);
P=X’;
if (err<delta)|(relerr<delta)
break
end
end
X=X’;
Figure 2 – Code Matlab implémetant la méthode de Gauss-Seidel
4