Está en la página 1de 6

Jacobi

program relajacion_jacobi
real::A(100,100),B(100),X(100,100),s,n,es,ea,k
integer::i,j
print*,'metodo de relajacion de jacobi'
print*,'insertar valor de orden de matriz '
read*,n
print*,'insertar tolerancia'
read*,es

!elementos de matriz A...

print*,'insertar valores de matriz A'


do i=1,n
read*,(A(i,j),j=1,n)
end do

!elementos de B...

print*,'insertar valores de B'


do i=1,n
read*,B(i)
end do

!insertar vector de prueba X ...

print*,'insertar valores de matriz X'


k=1
do i=1,n
read*,X(k,i)
end do

!operaciones

10 do i=1,n
s=0
do j=1,n
if(j.ne.i)then
s=s+(A(i,j))*(X(k,j))
end if
X(k+1,i)=(B(i)-s)/A(i,i)
end do
end do

do i=1,n
ea=abs((x(k+1,i))-X(k,i))
if(ea.gt.es)then
k=k+1
goto 10
else
end if
end do

! salida de dator

Print*,'el valor de x'


do i=1,k+1
Print*,'x orden',(i-1),':'
write(*,9)(X(i,j),j=1,n)
print*,''
end do
print*,'tolerancia',ea,' num. interaciones:',k
9 format( 1000(1x,(f8.4)))
end program

gauss
program relajacion_Gauss_Seidel
real::A(100,100),B(100),X(100,100),s1,s2,n,es,ea,k
integer::i,j
print*,'metodo de relajacion de jacobi'
print*,'insertar valor de orden de matriz '
read*,n
print*,'insertar tolerancia'
read*,es

!elementos de matriz A...

print*,'insertar valores de matriz A'


do i=1,n
read*,(A(i,j),j=1,n)
end do

!elementos de B...
print*,'insertar valores de B'
do i=1,n
read*,B(i)
end do

!insertar vector de prueba X ...

print*,'insertar valores de matriz X'


k=1
do i=1,n
read*,X(k,i)
end do

!operaciones

10 do i=1,n
s1=0
s2=0
do j=1,n
if(j.gt.i)then
s1=s1+ (A(i,j))*(X(k,j))
end if
if(j.lt.i)then
s2=s2 +(A(i,j))*(X(k+1,j))
end if

X(k+1,i)=(B(i)-s1-s2)/A(i,i)
end do
end do

do i=1,n
ea=abs((x(k+1,i))-X(k,i))
if(ea.gt.es)then
k=k+1
goto 10
else
end if
end do

! salida de dator

Print*,'el valor de x'


do i=1,k+1
Print*,'x orden',(i-1),':'
write(*,9)(X(i,j),j=1,n)
print*,''
end do
print*,'tolerancia',ea,'num. interaciones:',k
9 format( 1000(1x,(f8.4)))
end program

sobre relajacion
program sobre_relajacion_sucesiva
real::A(100,100),B(100),X(100,100),s,s1,s2,n,es,ea,k ,w
integer::i,j
print*,'metodo de sobre relajacion sucesiva'
print*,'insertar valor de orden de matriz '
read*,n
print*,'insertar tolerancia y el parametro de relajacion'
read*,es,w

!elementos de matriz A...

print*,'insertar valores de matriz A'


do i=1,n
read*,(A(i,j),j=1,n)
end do

!elementos de B...

print*,'insertar valores de B'


do i=1,n
read*,B(i)
end do

!insertar vector de prueba X ...

print*,'insertar valores de matriz X'


k=1
do i=1,n
read*,X(k,i)
end do

!operaciones
10 do i=1,n
s1=0
s2=0
s=0
do j=1,n

s=s+(1-w)*(A(i,j))*(X(k,j))
if(j.gt.i)then
s1=s1+ (A(i,j))*(X(k,j))
end if
if(j.lt.i)then
s2=s2 +(A(i,j))*(X(k+1,j))
end if

X(k+1,i)=(w*B(i)-s1-s2+s)/A(i,i)
end do
end do

do i=1,n
ea=abs((x(k+1,i))-X(k,i))
if(ea.gt.es)then
k=k+1
goto 10
else
end if
end do

! salida de dator

Print*,'el valor de x'


do i=1,k+1
Print*,'x orden',(i-1),':'
write(*,9)(X(i,j),j=1,n)
print*,''
end do
print*,'tolerancia',ea,'num. interaciones:',k
9 format( 1000(1x,(f8.4)))
end program

También podría gustarte