! ================================================================
! 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
To embed this project on your website, copy the following code and paste it into your website's HTML: