Está en la página 1de 5

Program SeccionDorada

Implicit none

Integer ::i,j,k
!Selección del punto experimental
real*8 :: T, GA, GB, GC, tol, e
!Sección dorada
real*8 :: A,B,C,D,h
real*8 :: t1, t2
real*8 :: yA,yB,yC,yD

write(*,*)'Solución por el metodo de la Seccion Dorada: '


write(*,*)'Cantidad de iteraciones: (100)'
read(*,*)k

write(*,*)'Seleccionar una temperatura para evaluar: '


write(*,*)'1000(1), 1100(2), 1200(3), 1300(4), 1400(5), 1500(6)'
read(*,*)j

write(*,*)'Ingresar la tolerancia (1e-4)'


read(*,*)tol
!Selección de temperatura a estudiar
if (j==1) then
T=1000
GA=-395790
GB=-192420
GC=-200240
else if (j==2) then
T=1100
GA=-395960
GB=-187000
GC=-209110
else if (j==3) then
T=1200
GA=-396020
GB=-181380
GC=-217830
else if (j==4) then
T=1300
GA=-396080
GB=-175720
GC=-226130
else if (j==5) then
T=1400
GA=-396130
GB=-170020
GC=-235130
else if (j==6) then
T=1500
GA=-396160
GB=-164310
GC=-243740
end if

write(*,*)'Temperatura en la que se evalua:',T


write(*,*)'Valor de G°CO2:', GA
write(*,*)'Valor de G°H2O:', GB
write(*,*)'Valor de G°CO :', GC

write(*,*)'Ingresar el valor de A'


read(*,*)A
write(*,*)'Ingresar el valor de B'
read(*,*)B
h=B-A
t1=(2.236067977-1)/2
t2=t1**2

!Hallazgo de punto experimental en C y D

C=A+h*t2
D=A+h*t1

!Evaluar los valores de A, B, C y D en la funcion objetivo


yA=(A/2)*(GB+GC)-(GA*((1-A)/2))+8.314*T*((A*alog(A/2)+((1-A)*alog((1-
A)/2))))
yB=(B/2)*(GB+GC)-(GA*((1-B)/2))+8.314*T*((B*alog(B/2)+((1-
B)*alog((1-B)/2))))
yC=(C/2)*(GB+GC)-(GA*((1-C)/2))+8.314*T*((C*alog(C/2)+((1-
C)*alog((1-C)/2))))
yD=(D/2)*(GB+GC)-(GA*((1-D)/2))+8.314*T*((D*alog(D/2)+((1-
D)*alog((1-D)/2))))

write(*,*)yA, yB, yC, yD


do i=1,k
if (yC<yD) then
B=D
yB=yD
D=C
yD=yC
h=B-A
C=A+h*t2
yC=(C/2)*(GB+GC-GA)+(GA/2)+8.314*T*(alog((1-
C)/2)+C*alog(C/2)-C*alog((1-C)/2))
e=abs(h)
if (e<=tol) then
write(*,*)'Punto de convergencia'
end if
write(*,*)i, C, yC, D, yD, A
else if (yC>yD) then
A=C
yA=yC
C=D
yC=yD
h=B-A
D=A+h*t1
yD=(D/2)*(GB+GC-GA)+(GA/2)+8.314*T*(alog((1-
D)/2)+D*alog(D/2)-D*alog((1-D)/2))
e=abs(h)
if (e<=tol)then
write(*,*)'Punto de convergencia'
end if
write(*,*)i, C, yC, D, yD, A
end if
end do
end program SeccionDorada

También podría gustarte