Método de Euler e solução de equações diferenciais usando Fortran Prof. Emílio Graciliano Ferreira Mercuri Departamento de Engenharia Ambiental - DEA, Universidade Federal do Paraná - UFPR [email protected] 19 de fevereiro de 2013 Resumo: O objetivo da aula é apresentar uma introdução aos métodos aproximados para resolver equações diferenciais ordinárias. Introdução O roteiro da aula deverá seguir os seguintes tópicos: • Entrega dos Trabalhos em dupla – Relatório em formato de artigo. – Apresentar a modelagem do problema da evolução da temperatura do Lago. • Cada dupla deverá portar o seu computador contendo: – O compilador de Fortran Force. – Arquivo com Aulas de Fortran. • Introdução ao Método de Euler – Método para resolução de EDO – Aplicação de um exemplo em linguagem Fortran. 1 O Método de Euler (Método da Reta Tangente) Considere um problema de valor inicial (PVI) representado por uma equação diferencial de primeira ordem: dy = f (y, t) dt (1) y(t0 ) = y0 (2) e condição inicial Sendo a Equação 1 linear e as funções f e fy contínuas em algum retângulo no plano ty contendo o ponto (t0 , y0 ), existe um teorema no cálculo que garante uma solução única y = φ(t) do problema dado em algum intervalo em torno de t0 . O Método de Euler, ou método da reta tangente é expresso pela equação [?]: yn+1 = yn + f (tn , yn )(tn+1 − tn ) n = 0, 1, 2, ... (3) Se o tamanho do passo tiver valor uniforme h e se denotarmos f (tn , yn ) = fn , então a Equação 3 fica na forma: yn+1 = yn + fn h n = 0, 1, 2, ... (4) O método de Euler consiste em calcular, repetidamente, a Equação 3 ou 4, usando o resultado de cada passo para executar o próximo passo. Assim, obtemos a sequência de valores y0 , y1 , y2 , ..., yn , ... (5) que aproximam o valor da solução φ(t) nos pontos t0 , t1 , t2 , ..., tn , ... (6) Um programa de computador para o método de Euler tem a estrutura a seguir. As instruções específicas serão escritas na linguagem de programação Fortran. O algoritmo deverá seguir os passos mostrados na Tabela 1. Passo Passo Passo Passo Passo Passo 1. 2. 3. 4. 5. 6. Passo 7. Passo 8. Tabela 1: Algoritmo do Método de Euler Defina f (t, y) Insira os valores iniciais t0 e y0 Insira o tamanho do passo h e o número de passos n Escreva t0 e y0 Para j de 1 até n Calcule k1 = f (t, y) y = y + h ∗ k1 t=t+h Escreva t e y Fim Exemplo de aplicação em Fortran Considere o PVI, para a função y = y(t) e sendo y 0 = dy : dt y 0 =1 − t + 4y y(0) =1 (7) A Eq. 7 é uma Equação linear de primeira ordem cuja solução que satisfaz as condições iniciais pode ser encontrada em etapas. Começando pela equação homogênea: dy − 4y = 0 dt (8) dy = 4dt y (9) ln y = 4t + C1 (10) y = Ce4t (11) A solução da equação não homogênea pode ser escrita na forma: y = Ce4t + A + Bt (12) y 0 = 4Ce4t + B (13) 4Ce4t + B − 4(Ce4t + A + Bt) = 1 − t (14) (B − 4A) − 4Bt = 1 − t (15) 1 4 (16) 3 16 (17) derivando: e substituindo na EDO original: −4B = −1 1 − 4A = 1 4 B= A=− e a Equação fica: y = Ce4t − 3 1 + t 16 4 (18) 3 =1 16 (19) Aplicando a condição inicial y(0) = 1: y(0) = C − 3 16 + 3 19 = = 16 16 16 Portanto, a solução da equação diferencial é: C =1+ 1 3 19 y = t− + e4t 4 16 16 (20) (21) Como conhecemos a solução da EDO, a princípio não é necessário resolver o problema numericamente. Porém, nem todas as equações possuem solução analítica e a disponibilidade da solução exata torna fácil determinar a precisão de qualquer procedimento numérico utilizado nesse problema. A solução da EDO apresenta bastante divergência numérica dependendo do método escolhido. Agora vamos procurar qual o método mais preciso para resolvê-la, começando pelo método de Euler. Algoritmo A seguir é apresentado o código do algoritmo na linguagem Fortran. Code 1: Código em Fortran para aplicação do Algoritmo 1 PROGRAM EULER 2 3 4 5 6 7 8 REAL t , f REAL y , h REAL k1 REAL exata , e r r o INTEGER i , n !REAL VER 9 10 11 12 13 14 WRITE( ∗ , ∗ ) ’METODO DE EULER’ WRITE( ∗ , ∗ ) ’O PROGRAMA RESOLVE UMA EQUACAO DIFERENCIAL ORDINARIA’ 15 16 ! open ( 1 0 , f i l e = "EULER. t x t " ) 17 18 19 20 t = 0.0 y = 1.0 h = 0.001 21 22 f = 1 − t + 4∗ y 23 24 n = 200 ! N mero de i t e r a es 25 26 DO i = 1 , n , 1 27 28 29 30 31 32 k1 = 1 − t + 4∗ y y = y + h ∗ k1 e x a t a = 0 . 2 5 ∗ t −3.0/16.0 + 1 9 . 0 ∗ exp ( 4 . 0 ∗ t ) / 1 6 . 0 e r r o = abs ( exata−y ) WRITE( ∗ , ∗ ) t , y , exata , e r r o 33 34 35 ! w r i t e ( 1 0 , 9 9 9 ) t , y , exata , e r r o !999 format ( 4 F32 . 1 6 ) 36 37 t = t + h 38 39 END DO 40 41 42 !VER = SYSTEM( ’ Wgnuplot u2 . gnu ’ ) !VER = SYSTEM( ’ OutPut . png ’ ) 43 44 END PROGRAM EULER