Universit´e de Marseille
Licence de Math´ematiques, analyse num´erique Travaux Pratiques 3, en python
PourA∈ Mn(IR) (n >1) inversible et b∈IRn donn´es, on s’int´eresse dans cet exercice aux m´ethodes it´eratives permettant de calculer la solution du syst`eme lin´eaireAx=b.
On va consid`ere des m´ethodes qui s’´ecrivent sous le formalisme suivant : M x(k+1)=N x(k)+b, pour toutk≥0.
On rappelle que pour que la suite (x(k))k∈Nconverge (quelquesoitx(0)et quelque- soitb) il faut et il suffit que ρ(M−1N)<1.
On met A sous la forme A = D−E −F, o`u D est la diagonale de A, E est la partie triangulaire inf´erieure de A (diagonale exclue) et F est la partie triangulaire sup´erieure deA(diagonale exclue).
Avec python, on peut d´efinir les matricesD ,E et F `a partir deAen utilisant les commandesnumpy.diag, numpy.triletnumpy.triu.
PourM,N etεdonn´es avecε >0, la m´ethode s’´ecrit : InitialisationChoisirx(0dans IRn,
It´erationPourk≥0, si|r(k|> ε, avecr(k)=b−Ax(k), calculerx(k+1)solution deM x(k+1)=N x(k)+b.
Pour tester et comparer les m´ethodes de Jacobi, Gauss-Seidel et SOR, on va s’int´eresser `a des probl`emes dont on connait la solution exacte, not´ee x. Les deux probl`emes consid´er´es sont :
Premier probl`eme
A=
10 7 8 7
7 5 6 5
8 6 10 9
7 5 9 10
etb=
32 23 33 31
.
Second probl`eme
Pour ce second prob`eme, on prend pourAla matrice de l’exercice 1 du tp1. Pour n∈IN?, on noteAncette matrice (qui ´etait not´eeAhau tp1, avech= 1/(n+1)).
Le second membre b correspond `a f(x) = π2sin(2πx) pour x ∈ [0,1] (il est diff´erent de celui des tp 1 et 2). Pour n∈IN?, on note bn ce second membre.
Le probl`eme discr´etis´e s’´ecrit doncAnxn=bn. On pourra se limiter `a consid´erer le casn= 10.
1. On utilise ici la m´ethode de Jacobi (M =D,N =E+F).
(a) Construire une fonction dont les param`etres sont A, b, ε et x(0) et qui calcule, avec la m´ethode de Jacobi, la solution approch´ee du syst`eme lin´eaire Ax=bet retourne le r´esidu (|r(k|) et l’erreur (|x−x(k)|) `a chaque it´eration de la m´ethode.
(b) Pour les deux probl`emes consid´er´es, calculerρ(M−1N).
Si ρ(M−1N) < 1, construire pour ε = 10−6 et deux choix diff´erents de x(0) (par exemple, x(0) = 0 et x(0) dont toutes les composantes sont
´
egales `a 1) un graphique, avec une ´echelle semilog, donnant l’´evolution de l’erreur en fonction de k et l’´evolution de la quantit´eρ(M−1N)k [Utiliser matplotlib.pyplot.semilogy].
L’erreur se comporte-t-elle comme ρ(M−1N)k ? Donner aussi le nombre d’i´erations utilis´ees.
1
2. Reprendre les questions 1a et 1b avec la m´ethode de Gauss-Seidel (M =D−E, N=F).
3. On s’int´eresse maintenant `a la m´ethode SOR, c’est-`a-dire M = ω1D −E, N=F+ (ω1 −1)D avec 0< ω <2.
(a) Reprendre la question 1a en ajoutant le param`etreω.
(b) Calculer une approximation de la valeur deω minimisantρ(M−1N).
(c) Reprendre la question 1b avec la valeur de ω trouv´ee dans la question pr´ec´edente.
4. Comparer l’efficacit´e des trois m´ethodes (Jacobi, Gauss-Seidel et SOR) sur ces deux exemples.
Pourquoi dans certains cas la m´ethode de Jacobi donne la solution (approch´ee) avec un nombre d’it´erations inf´erieur au nombre d’it´erations n´ecessaire pour la m´ethode de Gauss-Seidel ?
2