Vous êtes sur la page 1sur 9

Rpublique algrienne dmocratique et populaire

FACULTE DESCIENCE DINGENIEURS


DEPARTEMENT DE MAINTENANCE













Ralis par:
-GASMI MOSTAPHA EL HADI Pr :k.rachedi
-KADRI AHCENE
-Groupe : MMTR 13






TP mthode numrique
Rsoudre une quation linaire
AX=B par la mthode de Jacobi
partir de programmation fortran
2013/2014

Plan de travail :
Partie thorique :
Explication la mthode de Jacobi
Partie pratique :
Programme de Jacobi sur Fortran
Solution




















Partie thorique :
La mthode de Jacobi, due au mathmaticien allemand Karl Jacobi, est une mthode itrative
de rsolution d'un systme matriciel de la forme Ax=b. Pour cela, on utilise une suite x
(k)
qui
converge vers un point fixe x, solution du systme d'quations linaires.
Principe de construction :
On cherche construire l'algorithme pour x
(0)
donn, la suite x
(k + 1)
= F(x
(k)
) avec .

A = M N o M est une matrice inversible.

O F est une fonction affine.
Algorithme :

Si x est solution de Ax = b alors x = M
1
Nx + M
1
b .
Vecteur erreur :
Soit e
(k)
le vecteur erreur
e
(k + 1)
= x
(k + 1)
x
(k)
= M
1
N(x
(k)
x
(k 1)
) = M
1
Ne
(k)

On pose B = M
1
N, ce qui donne e
(k + 1)
= Be
(k)
= B
(k + 1)
e
(0)
.
Convergence :
L'algorithme converge si (matrice nulle).

Thorme : Une condition ncessaire et suffisante pour que est que le
rayon spectral (plus grande valeur propre en module) de B soit strictement infrieur 1.

Thorme : La mthode converge quel que soit x
(0)
pour les systmes linaires dont la
matrice est diagonale strictement dominante.






Mthode de Jacobi :
On dcompose la matrice A de la faon suivante : A = D-E-F avec D la diagonale, -E la partie
en dessous de la diagonale et -F la partie au-dessus. Dans la mthode de Jacobi, on choisit M
= D et N = E+F (dans la mthode de Gauss-Seidel, M = D-E et N = F).
x
(k + 1)
= D
1
(E + F)x
(k)
+ D
1
b avec
pour la ligne i de D
1
(E + F) :

Vecteur rsidu :
Soit r
(k)
= De
(k)
le vecteur rsidu. On peut crire avec que l'on
calcule de la manire suivante :.

Test d'arrt :
Pour le test d'arrt, on utilise le vecteur rsidu, ce qui donne, pour une prcision donne :

Conclusion
Cette mthode a un cot de l'ordre de 3n+2n par itration, elle est trs facilement paralllisa-
bl contrairement la mthode de Gauss-Seidel, mais qui converge plus vite.







Partie pratique :
Le programme de Jacobi :
program ljacobi
parameter(mmax=50,nmax=50,mx=mmax+1,ny=nmax+1)
parameter(tol=.005)
dimension u(0:mx,0:ny)
dimension v(0:mx,0:ny)
dimension e(0:mx,0:ny)
dimension a(nmax), b(nmax), c(nmax), d(nmax)
dx = 1./mx
do 2 m = 1,mmax
x = m*dx
v(m,0) = x*x
v(m,ny) = x*x - 1.
2 continue
dy = 1./ny
do 3 n = 1,nmax
y = n*dy
v(0,n) = -y*y
v(mx,n) = 1. - y*y
3 continue
do 99 j = 1,nmax
do 99 i = 1,mmax
x = i*dx
y = j*dy
e(i,j) = x*x - y*y
v(i,j) = 0.0
99 continue
do 77 k = 1,100
do 6 m = 1,mmax
do 55 n = 1,nmax
a(n) = -1.
b(n) = 4.
c(n) = -1.
d(n) = v(m-1,n) + v(m+1,n)
55 continue
d(1) = d(1) + v(m,0)
d(nmax) = d(nmax) + v(m,ny)
do 10 i = 2,nmax
ratio = a(i)/b(i-1)
b(i) = b(i) - ratio*c(i-1)
d(i) = d(i) - ratio*d(i-1)
10 continue
d(nmax) = d(nmax)/b(nmax)
u(m,nmax) = d(nmax)
do 20 i = nmax-1,1,-1
d(i) = (d(i) - c(i)*d(i+1))/b(i)
u(m,i) = d(i)
20 continue
6 continue
do 7 n = 1,nmax
do 7 m = 1,mmax
v(m,n) = u(m,n)
7 continue
residual = 0.0
emax = 0.0
do 88 n = 1,mmax
do 88 m = 1,mmax
res = 4.*v(m,n) - (v(m-1,n)+v(m,n-1)+v(m+1,n)+v(m,n+1))
residual = amax1(abs(res),residual)
error = v(m,n) - e(m,n)
emax = amax1(abs(error),emax)
88 continue
write(6,200) k,residual,emax
if(emax.lt.tol) goto 999
77 continue
999 write(6,300)
200 format('at iteration ',i5' residual = ',e10.2' error = ',e10.2)
300 format('done')
end























Simply FORTRAN:
























La solution:
Lexcution :


t iteration 1 residual = .88E+00 error = .91E+00
t iteration 2 residual = .44E+00 error = .87E+00
t iteration 3 residual = .29E+00 error = .83E+00
t iteration 4 residual = .23E+00 error = .79E+00
t iteration 5 residual = .17E+00 error = .77E+00
t iteration 6 residual = .16E+00 error = .76E+00
t iteration 7 residual = .13E+00 error = .73E+00
t iteration 8 residual = .12E+00 error = .71E+00
t iteration 9 residual = .11E+00 error = .71E+00
t iteration 10 residual = .95E-01 error = .69E+00
t iteration 11 residual = .90E-01 error = .68E+00
t iteration 12 residual = .78E-01 error = .67E+00
t iteration 13 residual = .76E-01 error = .65E+00
t iteration 14 residual = .69E-01 error = .64E+00
t iteration 15 residual = .66E-01 error = .63E+00
t iteration 16 residual = .61E-01 error = .62E+00
Press any key to continue

Vous aimerez peut-être aussi