program Practica_01_MetodoRomberg
!Nalleli Iridian Avila Garcia 1941603
!Física Computacional (Clase 2:00-3:00 pm)
implicit none
!Declaracion de las variables a utilizar
real:: a, b, h
integer :: nmax, i, j
real, dimension(:,:), allocatable :: r
print*, "Este programa esta creado para resolver mediante el metodo de Romberg la integral de (e**x)/x"
print*, "definido en [1,3] con 5 particiones."
print*, "La segunda columna es el resultado de estas aproximaciones"
! Definir los límites de integración
a = 1.0
b = 3.0
! Con este se divide el numero de subdivisiones
nmax = 5
! Aqui se calcula el tamaño inicial de paso
h = (b - a)
! Parte de allocar memoria para la tabla Romberg
allocate(r(nmax, nmax))
! Calcular la primera columna de la tabla (primera aproximacion)
r(1,1) = h * 0.5 * ((exp(a) / a) + (exp(b) / b))
! Procedimiento para calcular el resto de las columnas
do i = 2, nmax
h = h / 2.0
r(1,i) = 0.0
do j = 1, 2**(i-2)
r(1,i) = r(1,i) + (exp(a + (2*j - 1)*h) / (a + (2*j - 1)*h))
end do
r(1,i) = r(1,i) * h + 0.5 * r(1,i-1)
end do
! Esta parte comprende del procedimiento para calcular los valores de Romberg
do i = 2, nmax
do j = i, nmax
r(i,j) = r(i,j-1) + (r(i,j-1) - r(i-1,j-1)) / ((4.0**(i-1)) - 1.0)
end do
end do
! Y aqui de la impresion de los resultados obtenidos
do i = 1, nmax
write(*, '(A,I2,A)', advance='no') "N=", 2**(i-1), ": "
do j = 1, i
write(*, '(F12.8, A)', advance='no') r(j,i)
end do
write(*, *)
end do
! Liberar memoria
deallocate(r)
end program Practica_01_MetodoRomberg
To embed this project on your website, copy the following code and paste it into your website's HTML: