PROGRAM Euler IMPLICIT NONE !boa prática (se não colocar o fortran aceita qualquer variável) CHARACTER(LEN=12), PARAMETER :: arquivoSaida = 'solucaoEuler' INTEGER, PARAMETER :: pontos = 1.d3! Valores a serem calculados DOUBLE PRECISION, PARAMETER :: passo = 1.d-1! passo de integração DOUBLE PRECISION, DIMENSION(0:pontos) :: solucao! curva solução da edo INTEGER :: ii solucao(0) = 1.d0! condicao inicial DO ii = 1, pontos! loop de integração solucao(ii) = solucao(ii-1) + passo*EDO_DX(solucao(ii-1))! aplicação do método de Euler END DO CALL SalvaSolucao CONTAINS! Subrotinas e funções independentes DOUBLE PRECISION FUNCTION EDO_DX(x)!Equação diferencial: entra com o valor de x e calcula dx/dt IMPLICIT NONE DOUBLE PRECISION, INTENT(IN) :: x! não altera o valor EDO_DX = -x! dx/dt = -x END FUNCTION EDO_DX SUBROUTINE SalvaSolucao! Salva solução da EDO IMPLICIT NONE INTEGER :: i OPEN(101, FILE = arquivoSaida, STATUS = 'unknown') DO i = 0, pontos WRITE(101, '(2F10.4)') DFLOAT(i)*passo, solucao(i) END DO CLOSE(101) END SUBROUTINE SalvaSolucao END PROGRAM Euler