You are on page 1of 4

Metoda Jacobi

program metode_iterative
implicit none
integer, parameter::nmax=100
real*8, parameter::eps=1.d-7
real*8::xold(nmax), xnew(nmax)
real*8::a(nmax,nmax), b(nmax),norm,norma,s1,s2,s
integer::i,j,n,contor

open(1,file="matrice_Jacobi.txt")
open(3,file="rezultate_jacobi.txt")
!

a=1.d0

b=7.d0

!
!
!

do i=1,10
write(2,100)(a(i,j),j=1,10),b(i)
enddo

! !
=================================================
===================================
!citire date din fisierul 1
!
=================================================
===================================
read(1,101)n
do i=1,n
read(1,100)(a(i,j),j=1,n),b(i)
enddo
!
=================================================
===================================
!verificare diagonal dominanta

!
=================================================
===================================
do i=1,n
s=0.d0
do j=1,n
if (i/=j) then
S=S+dabs(a(i,j))
endif
enddo
if(dabs(a(i,i))<=S)then
write(*,*)"Sistemul nu este diagonal dominant"
exit
endif
enddo
xnew=0.d0
xold=100.d0
norm=norma(n,xold,xnew)
contor=0
!
=================================================
===================================
!implementare procedura metoda iterativa
!
=================================================
===================================
do while((norm>eps).and.(contor<1000))
xold=xnew
do i=1,n
s1=0.d0
do j=1,i-1

S1=s1+a(i,j)*xold(j)
enddo
s2=0.d0
do j=i+1,n
s2=s2+a(i,j)*xold(j)
enddo
xnew(i)=(b(i)-s1-s2)/a(i,i)
enddo
norm=norma(n,xold,xnew)
contor=contor+1
write(3,*)"contor=",contor, "norm=",norm
enddo !pentru do while
!
=================================================
===================================
!afisare rezultate
!
=================================================
===================================

do i=1,n
write(3,100)(a(i,j),j=1,n),b(i),xnew(i)
enddo
100 format(50(F10.3,2x))
101 format(I2)

write(*,*)"END >>>"
! read(*,*)
end program metode_iterative

function norma(m,x,y)
implicit none
integer::m,i
real*8::x(100),y(100),norma,s
s=0.d0
do i=1,m
s=s+(x(i)-y(i))**2
enddo
norma=dsqrt(s)
end function

You might also like