! ================================================================
! QUESTÃO 6 - MÉTODO DE TAYLOR DE SEGUNDA ORDEM
! ================================================================
! Programa adaptado a partir do código da professora Regina Lélis
! (Aula 14 - Métodos Numéricos Computacionais)
!
! ALGORITMO:
! 1. Definir a função f(x,y) = x - y + 2
! 2. Definir a derivada segunda: y'' = y - x - 1
! 3. Entrada: x0, y0, xf, n (número de intervalos)
! 4. Calcular passo = (xf - x0)/n
! 5. Para i = 0, 1, 2, ..., n-1:
!       y_{i+1} = y_i + h*(x_i - y_i + 2) + (h^2/2)*(y_i - x_i - 1)
!       x_{i+1} = x_i + h
! 6. Escrever os pares (x, y) no arquivo de saída
! ================================================================

program Q6_Taylor_Ordem2
    implicit none
    real :: x0, xf, y0, x, y, passo, n
    integer :: i
    
    ! Arquivo para escrever os dados calculados
    open(10, file='Q6_dados_Taylor2.dat', status='unknown')
    
    ! ============================================================
    ! CASO 1: h = 0.1
    ! ============================================================
    ! Dados de entrada
    x0 = 0.0          ! valor inicial de x
    y0 = 2.0          ! valor inicial de y (PVI do exercício 5)
    xf = 1.0          ! valor final de x
    n = 10.0          ! número de intervalos (h = 0.1)
    
    ! Cálculo do passo
    passo = (xf - x0)/n
    
    write(*,*) 'QUESTÃO 6 - TAYLOR 2a ORDEM (h = 0.1)'
    write(*,*) 'passo = ', passo
    write(*,*)
    
    write(10,*) '# QUESTÃO 6 - TAYLOR 2a ORDEM'
    write(10,*) '# h = ', passo
    write(10,*) '#    x            y'
    
    ! Inicialização
    x = x0
    y = y0
    
    ! Loop para cálculo dos valores de (xi, yi)
    do while (x .le. xf)
        write(10,*) x, y
        
        ! Fórmula de Taylor de segunda ordem:
        ! y_{i+1} = y_i + h*(x_i - y_i + 2) + (h^2/2)*(y_i - x_i - 1)
        y = y + passo*(x - y + 2.0) + (passo**2/2.0)*(y - x - 1.0)
        x = x + passo
    end do
    
    write(*,*) 'y(1.0) = ', y
    write(*,*)
    
    ! ============================================================
    ! CASO 2: h = 0.01
    ! ============================================================
    x0 = 0.0
    y0 = 2.0
    xf = 1.0
    n = 100.0         ! número de intervalos (h = 0.01)
    
    passo = (xf - x0)/n
    
    write(*,*) 'QUESTÃO 6 - TAYLOR 2a ORDEM (h = 0.01)'
    write(*,*) 'passo = ', passo
    write(*,*)
    
    write(10,*)
    write(10,*) '# QUESTÃO 6 - TAYLOR 2a ORDEM'
    write(10,*) '# h = ', passo
    write(10,*) '#    x            y'
    
    x = x0
    y = y0
    
    do while (x .le. xf)
        write(10,*) x, y
        y = y + passo*(x - y + 2.0) + (passo**2/2.0)*(y - x - 1.0)
        x = x + passo
    end do
    
    write(*,*) 'y(1.0) = ', y
    
    close(10)
    write(*,*)
    write(*,*) 'Arquivo gerado: Q6_dados_Taylor2.dat'
    
end program Q6_Taylor_Ordem2

Embed on website

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