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