You are on page 1of 2

JACOBI PROGRAM IN FORTRAN

program jacobi
implicit none
integer:: i,j,k,n, aux,no_max_iter,iter
real,allocatable :: a(:,:),x(:),xold(:), ea(:)
real :: es,suma
character salida*25
write(*,*)"metodo iterativo de jacobi"
write(*,*)"# variables"
read(*,*)n
write (*,*)'digitar nombre del archivo de salida'
read (*,*) salida

open(unit=20,file=salida,status='replace')
write(20,*) " iteracion x valor %ea"

allocate (a(n+1,n),x(n),ea(n),xold(n))
write(*,*)"# maximo iteraciones"
read(*,*)no_max_iter
write(*,*)"tolerancia: "
read(*,*)es
do i=1,n,1
write(*,*)'xo(i):'
read(*,*)xold(i)
end do

x(1:n)=0
ea(:)=1
iter=0

do i=1,n,1
do j=1,n+1,1
write(*,*)'a(i,j):'
read(*,*)a(j,i)
end do
end do

do while (iter<=no_max_iter)
aux=0
do i=1,n,1
suma=0
do k=1,n,1
if (i/=k) then
suma=suma+xold(k)*a(k,i)
end if
end do
x(i)=(a(n+1,i)-suma)/a(i,i)
if (xold(i)/=0)then
ea(i)=abs(((x(i)-xold(i))/x(i)))
else
if (x(i)==0)then
ea(i)=0
end if
end if
write(*,*)ea(i)
end do
do i=1,n,1
write(20,*) j,i,x(i),ea(i)
if (ea(i)<es) then
aux=aux+1
end if
end do
if (aux==n) then
write(*,*) "# iteraciones", iter
write(*,*) " i xi ea"
write(*,*) "----------------------------"
do i=1,n,1
write(*,*)i,x(i),ea(i)
end do
return
end if
iter=iter+1
xold(1:n)=x(1:n)
enddo
close(20)
write(*,*) "respuesta"
write(*,*) "# iteraciones", j
write(*,*) " i xi ea"
write(*,*) "----------------------------"
do i=1,n,1
write(*,*)i,x(i),ea(i)
end do
end program jacobi

You might also like