! Metodos Numericos y Simulaciones en Astrofisica
! FCEFN - UNSJ, 2010
!
! ejemplo 5a
!
! Metodo de Euler para problemas de valor inicial
!
! Calculo de la Ec. diferencial ordinaria:
!
! dy/dt = - y + sen (t) para y(0) = 1
!
! cuya solucion exacta es:
!
! y = [3 e^(-t)]/2 + 0.5 [sen (t) - cos(t)]
!
!
program eje5
implicit none
  integer, parameter ::p=selected_real_kind(16,200)
  real(p) :: hh,time,yy,yytrue
  
! ingrese el paso
!
  write(*,*)'Ingrese h: '
  read(*,*)hh
  
! valor inicial para y y t
!
  yy=1._p
  yytrue=1._P
  time=0._p
  open(7,file='eje5a.out')
  write(*,'(f8.3,2f23.18,g17.7)')time,yy,yytrue,0.
  write(7,*)time,yy,yytrue,0.
  
! inicia bucle de calculo
!
  do while(time < 10._p)
    time=time+hh
	
! calcula valor real de y
!
	yytrue=3._p/2._p*exp(-time)+0.5_p*(sin(time)-cos(time))

! calcula aproximacion por euler
!
   yy=yy+hh*(-yy+sin(time))	
   
   write(*,'(f8.3,2f23.18,g17.7)')time,yy,yytrue,abs(yytrue-yy)
   write(7,'(f8.3,2f23.18,g17.7)')time,yy,yytrue,abs(yytrue-yy)
  enddo
  close(7)
  
end program eje5a
