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

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: