Departamento de Física Universidade Federal da Paraíba 24 de Junho de 2009
Motivação Problemas envolvendo equações diferenciais são muito comuns em física Exceto pelos mais simples, que podemos resolver analiticamente, temos que recorrer a métodos numéricos De forma geral, não existe um "melhor método" A compreensão dos diferentes métodos, seus pontos fortes e suas deficiências é fundamental para podermos ter confiança nos resultados
Motivação Problemas envolvendo equações diferenciais são muito comuns em física Exceto pelos mais simples, que podemos resolver analiticamente, temos que recorrer a métodos numéricos De forma geral, não existe um "melhor método" A compreensão dos diferentes métodos, seus pontos fortes e suas deficiências é fundamental para podermos ter confiança nos resultados
Motivação Problemas envolvendo equações diferenciais são muito comuns em física Exceto pelos mais simples, que podemos resolver analiticamente, temos que recorrer a métodos numéricos De forma geral, não existe um "melhor método" A compreensão dos diferentes métodos, seus pontos fortes e suas deficiências é fundamental para podermos ter confiança nos resultados
Motivação Problemas envolvendo equações diferenciais são muito comuns em física Exceto pelos mais simples, que podemos resolver analiticamente, temos que recorrer a métodos numéricos De forma geral, não existe um "melhor método" A compreensão dos diferentes métodos, seus pontos fortes e suas deficiências é fundamental para podermos ter confiança nos resultados
O problema Resolver uma equação do tipo d 2 y dx 2 + q(x)dy dx = r(x) Sempre podemos reescrever equações diferenciais de ordem superior como um conjunto de equações diferenciais de primeira ordem dy dx = z(x) dz dx = r(x) q(x)z(x) Portanto, o problema passa a ser estudar um conjunto de N equações diferenciais ordinárias de primeira ordem
O problema Resolver uma equação do tipo d 2 y dx 2 + q(x)dy dx = r(x) Sempre podemos reescrever equações diferenciais de ordem superior como um conjunto de equações diferenciais de primeira ordem dy dx = z(x) dz dx = r(x) q(x)z(x) Portanto, o problema passa a ser estudar um conjunto de N equações diferenciais ordinárias de primeira ordem
O problema Resolver uma equação do tipo d 2 y dx 2 + q(x)dy dx = r(x) Sempre podemos reescrever equações diferenciais de ordem superior como um conjunto de equações diferenciais de primeira ordem dy dx = z(x) dz dx = r(x) q(x)z(x) Portanto, o problema passa a ser estudar um conjunto de N equações diferenciais ordinárias de primeira ordem
O problema Às vezes é conveniente incluir prefatores (funções da variável independente) na definição das novas variáveis para evitar problemas numéricos Tentativa e erro, senso comum, experiência indicam o caminho
O problema Às vezes é conveniente incluir prefatores (funções da variável independente) na definição das novas variáveis para evitar problemas numéricos Tentativa e erro, senso comum, experiência indicam o caminho
Condições de contorno O conjunto de equações diferenciais não define completamente o problema O tipo das condições de contorno são determinantes para a solução numérica a ser empregada 1 todos os y i são conhecidos em um determinado ponto x 0 2 Programas de valor de contorno informação sobre o comportamento da função na fronteira da região de integração
Condições de contorno O conjunto de equações diferenciais não define completamente o problema O tipo das condições de contorno são determinantes para a solução numérica a ser empregada 1 todos os y i são conhecidos em um determinado ponto x 0 2 Programas de valor de contorno informação sobre o comportamento da função na fronteira da região de integração
Condições de contorno O conjunto de equações diferenciais não define completamente o problema O tipo das condições de contorno são determinantes para a solução numérica a ser empregada 1 todos os y i são conhecidos em um determinado ponto x 0 2 Programas de valor de contorno informação sobre o comportamento da função na fronteira da região de integração
Condições de contorno O conjunto de equações diferenciais não define completamente o problema O tipo das condições de contorno são determinantes para a solução numérica a ser empregada 1 todos os y i são conhecidos em um determinado ponto x 0 2 Programas de valor de contorno informação sobre o comportamento da função na fronteira da região de integração
Idéia geral Introdução Reescrever dy e dx como diferenças finitas y e x Multiplicar a equação por x Assim obtemos expressões para a variação das funções quando um passo de tamanho x é dado No limite em que x é muito pequeno, temos uma boa aproximação para a equação diferencial
Idéia geral Introdução Reescrever dy e dx como diferenças finitas y e x Multiplicar a equação por x Assim obtemos expressões para a variação das funções quando um passo de tamanho x é dado No limite em que x é muito pequeno, temos uma boa aproximação para a equação diferencial
Idéia geral Introdução Reescrever dy e dx como diferenças finitas y e x Multiplicar a equação por x Assim obtemos expressões para a variação das funções quando um passo de tamanho x é dado No limite em que x é muito pequeno, temos uma boa aproximação para a equação diferencial
Idéia geral Introdução Reescrever dy e dx como diferenças finitas y e x Multiplicar a equação por x Assim obtemos expressões para a variação das funções quando um passo de tamanho x é dado No limite em que x é muito pequeno, temos uma boa aproximação para a equação diferencial
Introdução Consideremos a equação y (x) = f (x, y) com a condição de contorno y(x 0 ) = y 0 Desejamos encontrar y(x) Fazendo uma expansão em série de Taylor, temos y(x) = y(x 0 ) + (x x 0 )y (x 0 ) + O[(x x 0 ) 2 ] Definindo o tamanho do passo como h = x x 0, y(x 0 + h) = y(x 0 ) + hf (x 0, y 0 ) O método de Euler consiste na iteração desta equação y n+1 = y n + hf (x n, y n )
Introdução Consideremos a equação y (x) = f (x, y) com a condição de contorno y(x 0 ) = y 0 Desejamos encontrar y(x) Fazendo uma expansão em série de Taylor, temos y(x) = y(x 0 ) + (x x 0 )y (x 0 ) + O[(x x 0 ) 2 ] Definindo o tamanho do passo como h = x x 0, y(x 0 + h) = y(x 0 ) + hf (x 0, y 0 ) O método de Euler consiste na iteração desta equação y n+1 = y n + hf (x n, y n )
Introdução Consideremos a equação y (x) = f (x, y) com a condição de contorno y(x 0 ) = y 0 Desejamos encontrar y(x) Fazendo uma expansão em série de Taylor, temos y(x) = y(x 0 ) + (x x 0 )y (x 0 ) + O[(x x 0 ) 2 ] Definindo o tamanho do passo como h = x x 0, y(x 0 + h) = y(x 0 ) + hf (x 0, y 0 ) O método de Euler consiste na iteração desta equação y n+1 = y n + hf (x n, y n )
Introdução Consideremos a equação y (x) = f (x, y) com a condição de contorno y(x 0 ) = y 0 Desejamos encontrar y(x) Fazendo uma expansão em série de Taylor, temos y(x) = y(x 0 ) + (x x 0 )y (x 0 ) + O[(x x 0 ) 2 ] Definindo o tamanho do passo como h = x x 0, y(x 0 + h) = y(x 0 ) + hf (x 0, y 0 ) O método de Euler consiste na iteração desta equação y n+1 = y n + hf (x n, y n )
Introdução Consideremos a equação y (x) = f (x, y) com a condição de contorno y(x 0 ) = y 0 Desejamos encontrar y(x) Fazendo uma expansão em série de Taylor, temos y(x) = y(x 0 ) + (x x 0 )y (x 0 ) + O[(x x 0 ) 2 ] Definindo o tamanho do passo como h = x x 0, y(x 0 + h) = y(x 0 ) + hf (x 0, y 0 ) O método de Euler consiste na iteração desta equação y n+1 = y n + hf (x n, y n )
Introdução Consideremos a equação y (x) = f (x, y) com a condição de contorno y(x 0 ) = y 0 Desejamos encontrar y(x) Fazendo uma expansão em série de Taylor, temos y(x) = y(x 0 ) + (x x 0 )y (x 0 ) + O[(x x 0 ) 2 ] Definindo o tamanho do passo como h = x x 0, y(x 0 + h) = y(x 0 ) + hf (x 0, y 0 ) O método de Euler consiste na iteração desta equação y n+1 = y n + hf (x n, y n )
Implementação Introdução Para calcularmos y(x), dividimos o intervalo x x 0 em N partes h = x x 0 N Usamos o método de Euler y n+1 = y n + hf (x n, y n ) x 1 x 2 x 3
Implementação Introdução Para calcularmos y(x), dividimos o intervalo x x 0 em N partes h = x x 0 N Usamos o método de Euler y n+1 = y n + hf (x n, y n ) x 1 x 2 x 3
Implementação Introdução Para calcularmos y(x), dividimos o intervalo x x 0 em N partes h = x x 0 N Usamos o método de Euler y n+1 = y n + hf (x n, y n ) x 1 x 2 x 3
Implementação Introdução Para calcularmos y(x), dividimos o intervalo x x 0 em N partes h = x x 0 N Usamos o método de Euler y n+1 = y n + hf (x n, y n ) x 1 x 2 x 3
Implementação Introdução Para calcularmos y(x), dividimos o intervalo x x 0 em N partes h = x x 0 N Usamos o método de Euler y n+1 = y n + hf (x n, y n ) x 1 x 2 x 3
Implementação Introdução Para calcularmos y(x), dividimos o intervalo x x 0 em N partes h = x x 0 N Usamos o método de Euler y n+1 = y n + hf (x n, y n ) x 1 x 2 x 3
Implementação Introdução Para calcularmos y(x), dividimos o intervalo x x 0 em N partes h = x x 0 N Usamos o método de Euler y n+1 = y n + hf (x n, y n ) x 1 x 2 x 3
Deficiências do método O erro é de ordem h A derivada é considerada constante ao longo do intervalo h Seu valor no fim do intervalo não é considerado
Deficiências do método O erro é de ordem h A derivada é considerada constante ao longo do intervalo h Seu valor no fim do intervalo não é considerado
Deficiências do método O erro é de ordem h A derivada é considerada constante ao longo do intervalo h Seu valor no fim do intervalo não é considerado
No caso do método de Euler, expandimos y(x) até primeira ordem Se expandirmos até segunda ordem, teremos y(x) = y(x 0 ) + hf (x 0, y 0 ) + y (x 0 ) h2 2 + O[h3 ]
No caso do método de Euler, expandimos y(x) até primeira ordem Se expandirmos até segunda ordem, teremos y(x) = y(x 0 ) + hf (x 0, y 0 ) + y (x 0 ) h2 2 + O[h3 ]
No caso do método de Euler, expandimos y(x) até primeira ordem Se expandirmos até segunda ordem, teremos y(x) = y(x 0 ) + hf (x 0, y 0 ) + y (x 0 ) h2 2 + O[h3 ] Precisamos, portanto, determinar y (x 0 )
No caso do método de Euler, expandimos y(x) até primeira ordem Se expandirmos até segunda ordem, teremos y(x) = y(x 0 ) + hf (x 0, y 0 ) + y (x 0 ) h2 2 + O[h3 ] Precisamos, portanto, determinar y (x 0 ) y (x 0 ) = f x (x 0, y 0 ) + f y (x 0, y 0 )f (x 0, y 0 )
No caso do método de Euler, expandimos y(x) até primeira ordem Se expandirmos até segunda ordem, teremos y(x) = y(x 0 ) + hf (x 0, y 0 ) + y (x 0 ) h2 2 + O[h3 ] Logo a expansão se torna y(x) = y(x 0 )+hf (x 0, y 0 )+ h2 2 f x(x 0, y 0 )+ h2 2 f y(x 0, y 0 )f (x 0, y 0 )
O método Runge-Kutta assume que a inclinação no intervalo h pode ser escrita como uma combinação linear de f (x, y) em certos pontos do intervalo No y(x) = y(x 0 ) + Ahf 0 + Bhf 1
O método Runge-Kutta assume que a inclinação no intervalo h pode ser escrita como uma combinação linear de f (x, y) em certos pontos do intervalo No y(x) = y(x 0 ) + Ahf 0 + Bhf 1
O método Runge-Kutta assume que a inclinação no intervalo h pode ser escrita como uma combinação linear de f (x, y) em certos pontos do intervalo No y(x) = y(x 0 ) + Ahf 0 + Bhf 1 onde f 0 = f (x 0, y 0 ), f 1 = f (x 0 + a 1 h, y 0 + a 2 hf 0 ), sendo A, B, a 1 e a 2 constantes a determinar
O método Runge-Kutta assume que a inclinação no intervalo h pode ser escrita como uma combinação linear de f (x, y) em certos pontos do intervalo No y(x) = y(x 0 ) + Ahf 0 + Bhf 1 Expandindo f 1 em série de Taylor, temos f 1 = f (x 0, y 0 ) + a 1 hf x (x 0, y 0 ) + a 2 hf y (x 0, y 0 )f (x 0, y 0 )
O método Runge-Kutta assume que a inclinação no intervalo h pode ser escrita como uma combinação linear de f (x, y) em certos pontos do intervalo No y(x) = y(x 0 ) + Ahf 0 + Bhf 1 Expandindo f 1 em série de Taylor, temos f 1 = f (x 0, y 0 ) + a 1 hf x (x 0, y 0 ) + a 2 hf y (x 0, y 0 )f (x 0, y 0 ) Portanto, temos y(x) = y(x 0 )+(A+B)hf (x 0, y 0 )+Bh 2 a 1 f x (x 0, y 0 )+Bh 2 a 2 f y (x 0, y 0 )f (x 0, y 0 )
Comparando a aproximação de Runge-Kutta y(x) = y(x 0 )+(A+B)hf (x 0, y 0 )+Bh 2 a 1 f x (x 0, y 0 )+Bh 2 a 2 f y (x 0, y 0 )f (x 0, y 0 ) com a expansão em série de Taylor, y(x) = y(x 0 ) + hf (x 0, y 0 ) + h2 2 f x(x 0, y 0 ) + h2 2 f y(x 0, y 0 )f (x 0, y 0 ) temos A + B = 1 Ba 1 = 1 2 Ba 2 = 1 2
Comparando a aproximação de Runge-Kutta y(x) = y(x 0 )+(A+B)hf (x 0, y 0 )+Bh 2 a 1 f x (x 0, y 0 )+Bh 2 a 2 f y (x 0, y 0 )f (x 0, y 0 ) com a expansão em série de Taylor, y(x) = y(x 0 ) + hf (x 0, y 0 ) + h2 2 f x(x 0, y 0 ) + h2 2 f y(x 0, y 0 )f (x 0, y 0 ) temos A + B = 1 Ba 1 = 1 2 Ba 2 = 1 2
Comparando a aproximação de Runge-Kutta y(x) = y(x 0 )+(A+B)hf (x 0, y 0 )+Bh 2 a 1 f x (x 0, y 0 )+Bh 2 a 2 f y (x 0, y 0 )f (x 0, y 0 ) com a expansão em série de Taylor, y(x) = y(x 0 ) + hf (x 0, y 0 ) + h2 2 f x(x 0, y 0 ) + h2 2 f y(x 0, y 0 )f (x 0, y 0 ) temos A + B = 1 Ba 1 = 1 2 Ba 2 = 1 2
Escolha dos parâmetros Como temos 4 parâmetros e 3 equações, podemos escolher um deles arbitrariamente
Escolha dos parâmetros Como temos 4 parâmetros e 3 equações, podemos escolher um deles arbitrariamente A = 0, B = 1, a 1 = a 2 = 1/2 Regra do ponto médio
Escolha dos parâmetros Como temos 4 parâmetros e 3 equações, podemos escolher um deles arbitrariamente A = 0, B = 1, a 1 = a 2 = 1/2 Regra do ponto médio x 1 x 2 x 3
Escolha dos parâmetros Como temos 4 parâmetros e 3 equações, podemos escolher um deles arbitrariamente A = 0, B = 1, a 1 = a 2 = 1/2 Regra do ponto médio x 1 x 2 x 3
Escolha dos parâmetros Como temos 4 parâmetros e 3 equações, podemos escolher um deles arbitrariamente A = 0, B = 1, a 1 = a 2 = 1/2 Regra do ponto médio x 1 x 2 x 3
Escolha dos parâmetros Como temos 4 parâmetros e 3 equações, podemos escolher um deles arbitrariamente A = 0, B = 1, a 1 = a 2 = 1/2 Regra do ponto médio x 1 x 2 x 3
Escolha dos parâmetros Como temos 4 parâmetros e 3 equações, podemos escolher um deles arbitrariamente A = 0, B = 1, a 1 = a 2 = 1/2 Regra do ponto médio x 1 x 2 x 3
Escolha dos parâmetros Como temos 4 parâmetros e 3 equações, podemos escolher um deles arbitrariamente A = 0, B = 1, a 1 = a 2 = 1/2 Regra do ponto médio x 1 x 2 x 3
Escolha dos parâmetros Como temos 4 parâmetros e 3 equações, podemos escolher um deles arbitrariamente A = 0, B = 1, a 1 = a 2 = 1/2 Regra do ponto médio x 1 x 2 x 3
Escolha dos parâmetros Como temos 4 parâmetros e 3 equações, podemos escolher um deles arbitrariamente A = 1/3, B = 2/3, a 1 = a 2 = 3/4 valores ótimos (minimiza coeficiente do erro)
é apenas didático
é apenas didático Para uso prático quarta ordem
Dedução segue a mesma linha de raciocínio:
Dedução segue a mesma linha de raciocínio: 1 Expandir y(x 0 + h) até quarta ordem
Dedução segue a mesma linha de raciocínio: 1 Expandir y(x 0 + h) até quarta ordem 2 Assumir que y(x 0 + h) = y(x 0 ) + h [Af 0 + Bf 1 + Cf 2 + Df 3 ]
Dedução segue a mesma linha de raciocínio: 1 Expandir y(x 0 + h) até quarta ordem 2 Assumir que y(x 0 + h) = y(x 0 ) + h [Af 0 + Bf 1 + Cf 2 + Df 3 ] onde f0 = f (x 0, y 0 ) f 1 = f (x 0 + αh, y 0 + a 0 f 0 h) f 2 = f (x 0 + βh, y 0 + b 0 f 0 h + b 1 f 1 h) f 3 = f (x 0 + γh, y 0 + c 0 f 0 h + c 1 f 1 h + c 2 f 2 h)
Dedução segue a mesma linha de raciocínio: 1 Expandir y(x 0 + h) até quarta ordem 2 Assumir que y(x 0 + h) = y(x 0 ) + h [Af 0 + Bf 1 + Cf 2 + Df 3 ] onde f0 = f (x 0, y 0 ) f 1 = f (x 0 + αh, y 0 + a 0 f 0 h) f 2 = f (x 0 + βh, y 0 + b 0 f 0 h + b 1 f 1 h) f 3 = f (x 0 + γh, y 0 + c 0 f 0 h + c 1 f 1 h + c 2 f 2 h) 3 Expandir f 1, f 2 e f 3 em série de Taylor até terceira ordem
Dedução segue a mesma linha de raciocínio: 1 Expandir y(x 0 + h) até quarta ordem 2 Assumir que y(x 0 + h) = y(x 0 ) + h [Af 0 + Bf 1 + Cf 2 + Df 3 ] onde f0 = f (x 0, y 0 ) f 1 = f (x 0 + αh, y 0 + a 0 f 0 h) f 2 = f (x 0 + βh, y 0 + b 0 f 0 h + b 1 f 1 h) f 3 = f (x 0 + γh, y 0 + c 0 f 0 h + c 1 f 1 h + c 2 f 2 h) 3 Expandir f 1, f 2 e f 3 em série de Taylor até terceira ordem 4 Equacionar os termos das duas séries
Dedução segue a mesma linha de raciocínio: 1 Expandir y(x 0 + h) até quarta ordem 2 Assumir que y(x 0 + h) = y(x 0 ) + h [Af 0 + Bf 1 + Cf 2 + Df 3 ] onde f0 = f (x 0, y 0 ) f 1 = f (x 0 + αh, y 0 + a 0 f 0 h) f 2 = f (x 0 + βh, y 0 + b 0 f 0 h + b 1 f 1 h) f 3 = f (x 0 + γh, y 0 + c 0 f 0 h + c 1 f 1 h + c 2 f 2 h) 3 Expandir f 1, f 2 e f 3 em série de Taylor até terceira ordem 4 Equacionar os termos das duas séries 5 Serão 10 equações e 13 icógnitas diversas possibilidades
Escolha mais comum: f 0 = f (x 0, y 0 ) f 1 = f (x 0 + h 2, y 0 + h 2 f 0) f 2 = f (x 0 + h 2, y 0 + h 2 f 1) f 3 = f (x 0 + h, y 0 + hf 2 ) com y(x 0 + h) = y(x 0 ) + h 6 (f 0 + 2f 1 + 2f 2 + f 3 ) Note que no caso f (x, y) = g(x), o método equivale à regra de Simpson
Precisão Introdução Como saber se nossa resposta é precisa? Como avaliar o erro? Possível solução: calcular y(x) usando dois tamanhos de passo diferentes e comparar os resultados Podemos fazer essa comparação depois de vários passos Contudo, a natureza da solução pode depender da região Portanto, os resultados devem ser comparados frequentemente
Precisão Introdução Como saber se nossa resposta é precisa? Como avaliar o erro? Possível solução: calcular y(x) usando dois tamanhos de passo diferentes e comparar os resultados Podemos fazer essa comparação depois de vários passos Contudo, a natureza da solução pode depender da região Portanto, os resultados devem ser comparados frequentemente
Precisão Introdução Como saber se nossa resposta é precisa? Como avaliar o erro? Possível solução: calcular y(x) usando dois tamanhos de passo diferentes e comparar os resultados Podemos fazer essa comparação depois de vários passos Contudo, a natureza da solução pode depender da região Portanto, os resultados devem ser comparados frequentemente
Precisão Introdução Como saber se nossa resposta é precisa? Como avaliar o erro? Possível solução: calcular y(x) usando dois tamanhos de passo diferentes e comparar os resultados Podemos fazer essa comparação depois de vários passos Contudo, a natureza da solução pode depender da região Portanto, os resultados devem ser comparados frequentemente
Precisão Introdução Como saber se nossa resposta é precisa? Como avaliar o erro? Possível solução: calcular y(x) usando dois tamanhos de passo diferentes e comparar os resultados Podemos fazer essa comparação depois de vários passos Contudo, a natureza da solução pode depender da região Portanto, os resultados devem ser comparados frequentemente
Para atingirmos uma determinada precisão ɛ, podemos usar o seguinte algoritmo 1 Calcular y(x 0 + h) e y(x 0 + h/2) 2 Se y(x 0 + h) y(x 0 + h/2) <ɛ Erro é pequeno e estamos realizando um esforço computacional desnecessário Aceitamos o passo e diminuimos h para o próximo passo 3 Se y(x 0 + h) y(x 0 + h/2) >ɛ O erro é muito grande Rejeitamos o passo, diminuimos h e tentamos de novo
Alternativa aos passos de tamanho variável Utiliza o conhecimento do erro para estimar o tamanho do passo necessário para manter uma dada precisão O método
Alternativa aos passos de tamanho variável Utiliza o conhecimento do erro para estimar o tamanho do passo necessário para manter uma dada precisão O método
Alternativa aos passos de tamanho variável Utiliza o conhecimento do erro para estimar o tamanho do passo necessário para manter uma dada precisão O método Para um método de Runge-Kutta de ordem n, temos y(x 0 + h) = y exato + kh n+1
Alternativa aos passos de tamanho variável Utiliza o conhecimento do erro para estimar o tamanho do passo necessário para manter uma dada precisão O método Para um método de Runge-Kutta de ordem n, temos y(x 0 + h) = y exato + kh n+1 Portanto, a diferença entre Runge-Kutta de ordem n e n + 1 é y n (x 0 + h) y n+1 (x 0 + h) = kh n+1 ˆkh n+2 kh n+1
Alternativa aos passos de tamanho variável Utiliza o conhecimento do erro para estimar o tamanho do passo necessário para manter uma dada precisão O método Para um método de Runge-Kutta de ordem n, temos y(x 0 + h) = y exato + kh n+1 Portanto, a diferença entre Runge-Kutta de ordem n e n + 1 é y n (x 0 + h) y n+1 (x 0 + h) = kh n+1 ˆkh n+2 kh n+1 Logo k yn y n+1 h n+1
Alternativa aos passos de tamanho variável Utiliza o conhecimento do erro para estimar o tamanho do passo necessário para manter uma dada precisão O método Portanto, se h new é o tamanho do novo passo de forma a essas duas expressões concordarem (aceitando um erro ɛ)
Alternativa aos passos de tamanho variável Utiliza o conhecimento do erro para estimar o tamanho do passo necessário para manter uma dada precisão O método Portanto, se h new é o tamanho do novo passo de forma a essas duas expressões concordarem (aceitando um erro ɛ) h new ɛ = kh n+1 new = hn+1 new h n+1 y n y n+1
Alternativa aos passos de tamanho variável Utiliza o conhecimento do erro para estimar o tamanho do passo necessário para manter uma dada precisão O método Portanto, se h new é o tamanho do novo passo de forma a essas duas expressões concordarem (aceitando um erro ɛ) Donde h new ɛ = kh n+1 new = hn+1 new h n+1 y n y n+1 hɛ h new = h n y n (x 0 + h) y n+1 (x 0 + h)
Implementação Introdução 1 A partir de um passo de tamanho h, calculamos o erro y n y n+1 2 Se o erro for maior do que o aceitável, rejeitamos o passo e repetimos o processo com um passo menor h new 3 Se o erro for menor que o aceitável, estamos usando um passo grande demais. Aceitamos o passo e aumentamos o passo para a próxima iteração. Atenção Como o custo computacional de repetir um passo é relativamente alto, é aconselhável ser conservador e usar um passo menor que o estimado. Digamos, 0.9h new
Implementação Introdução 1 A partir de um passo de tamanho h, calculamos o erro y n y n+1 2 Se o erro for maior do que o aceitável, rejeitamos o passo e repetimos o processo com um passo menor h new 3 Se o erro for menor que o aceitável, estamos usando um passo grande demais. Aceitamos o passo e aumentamos o passo para a próxima iteração. Atenção Como o custo computacional de repetir um passo é relativamente alto, é aconselhável ser conservador e usar um passo menor que o estimado. Digamos, 0.9h new
Implementação Introdução 1 A partir de um passo de tamanho h, calculamos o erro y n y n+1 2 Se o erro for maior do que o aceitável, rejeitamos o passo e repetimos o processo com um passo menor h new 3 Se o erro for menor que o aceitável, estamos usando um passo grande demais. Aceitamos o passo e aumentamos o passo para a próxima iteração. Atenção Como o custo computacional de repetir um passo é relativamente alto, é aconselhável ser conservador e usar um passo menor que o estimado. Digamos, 0.9h new
Implementação Introdução 1 A partir de um passo de tamanho h, calculamos o erro y n y n+1 2 Se o erro for maior do que o aceitável, rejeitamos o passo e repetimos o processo com um passo menor h new 3 Se o erro for menor que o aceitável, estamos usando um passo grande demais. Aceitamos o passo e aumentamos o passo para a próxima iteração. Atenção Como o custo computacional de repetir um passo é relativamente alto, é aconselhável ser conservador e usar um passo menor que o estimado. Digamos, 0.9h new
Ganho computacional Qual o ganho computacional do método? Em geral, nenhum. O que se ganha com a otimização do passo, se perde com a aplicação de dois Runge-Kutta para cada passo. A Sacada: Usar métodos Runge-Kutta de diferentes ordens, com as mesmas funções intermediárias!!!
Ganho computacional Qual o ganho computacional do método? Em geral, nenhum. O que se ganha com a otimização do passo, se perde com a aplicação de dois Runge-Kutta para cada passo. A Sacada: Usar métodos Runge-Kutta de diferentes ordens, com as mesmas funções intermediárias!!!
Ganho computacional Qual o ganho computacional do método? Em geral, nenhum. O que se ganha com a otimização do passo, se perde com a aplicação de dois Runge-Kutta para cada passo. A Sacada: Usar métodos Runge-Kutta de diferentes ordens, com as mesmas funções intermediárias!!!
Ganho computacional Qual o ganho computacional do método? Em geral, nenhum. O que se ganha com a otimização do passo, se perde com a aplicação de dois Runge-Kutta para cada passo. A Sacada: Usar métodos Runge-Kutta de diferentes ordens, com as mesmas funções intermediárias!!!
Runge-Kutta-Fehlberg de quarta/quinta ordem Funções intermediárias f 0 = f (x 0, y 0 ) f 1 = f (x 0 + h 4, y 0 + h 4 f 0) f 2 = f (x 0 + 3h 8, y 0 + 3h 32 f 0 + 9h 32 f 1) f 3 = f (x 0 + 12h 13, y 0 + 1932h 2197 f 0 7200h 2197 f 1 + 7296h 2197 f 2) f 4 = f (x 0 + h, y 0 + 439h 216 f 0 8hf 1 + 3680h 513 f 2 845h 4104 f 3) f 5 = f (x 0 + h 2, y 0 8h 27 f 0 + 2hf 1 3544h 2565 f 2 + 1859h 4104 f 3 11h 40 f 4)
Runge-Kutta-Fehlberg de quarta/quinta ordem Aproximações ( 25 y 4 = y 0 + h 216 f 0 + 1408 2565 f 2 + 2197 4104 f 3 1 ) 5 f 4 ( 16 y 5 = y 0 + h 135 f 0 + 6656 12825 f 2 + 28561 56430 f 3 9 50 f 4 + 2 ) 55 f 5
Runge-Kutta-Fehlberg de quarta/quinta ordem Erro = y 4 y 5 = h 1 360 f 0 128 4275 f 2 2197 75240 f 3 + 1 50 f 4 + 2 55 f 5 Não é necessário calcular y explicitamente para aceitar ou não o passo h new = 0.9h 4 hɛ
Método da tentativa e erro (shooting method) Elementos Finitos Problemas com condições de contorno fixas Neste caso, queremos resolver uma EDO de ordem n sujeita a condições de contorno na superfície Primeiramente, reescrevemos a EDO como um conjunto de n equações de primeira ordem Y = y y y. y n 1 Assim, teremos n 1 condições de contorno no ponto inicial (t = 0) e n 2 = n n 1 condições de contorno no ponto final (t = t f )
Método da tentativa e erro (shooting method) Elementos Finitos Problemas com condições de contorno fixas Neste caso, queremos resolver uma EDO de ordem n sujeita a condições de contorno na superfície Primeiramente, reescrevemos a EDO como um conjunto de n equações de primeira ordem Y = y y y. y n 1 Assim, teremos n 1 condições de contorno no ponto inicial (t = 0) e n 2 = n n 1 condições de contorno no ponto final (t = t f )
Método da tentativa e erro (shooting method) Elementos Finitos Problemas com condições de contorno fixas Neste caso, queremos resolver uma EDO de ordem n sujeita a condições de contorno na superfície Primeiramente, reescrevemos a EDO como um conjunto de n equações de primeira ordem Y = y y y. y n 1 Assim, teremos n 1 condições de contorno no ponto inicial (t = 0) e n 2 = n n 1 condições de contorno no ponto final (t = t f )
Método da tentativa e erro (shooting method) Elementos Finitos Problemas com condições de contorno fixas Neste caso, queremos resolver uma EDO de ordem n sujeita a condições de contorno na superfície Primeiramente, reescrevemos a EDO como um conjunto de n equações de primeira ordem Y = y y y. y n 1 Assim, teremos n 1 condições de contorno no ponto inicial (t = 0) e n 2 = n n 1 condições de contorno no ponto final (t = t f )
Método da tentativa e erro (shooting method) Elementos Finitos Método da tentativa e erro 1 Escolhemos n 2 condições contorno arbitrárias (chute) complementanto as n 1 condições já existentes no ponto inicial 2 Usando um método para problemas de valor inicial, deixamos o sistema evoluir até o ponto t f 3 Calculamos o erro em relação às condições de contorno no ponto final Se o erro (todas as componentes) for menor que a tolerância, achamos a solução Se não, escolhemos um novo chute voltamos ao passo 2
Método da tentativa e erro (shooting method) Elementos Finitos Método da tentativa e erro 1 Escolhemos n 2 condições contorno arbitrárias (chute) complementanto as n 1 condições já existentes no ponto inicial 2 Usando um método para problemas de valor inicial, deixamos o sistema evoluir até o ponto t f 3 Calculamos o erro em relação às condições de contorno no ponto final Se o erro (todas as componentes) for menor que a tolerância, achamos a solução Se não, escolhemos um novo chute voltamos ao passo 2
Método da tentativa e erro (shooting method) Elementos Finitos Método da tentativa e erro 1 Escolhemos n 2 condições contorno arbitrárias (chute) complementanto as n 1 condições já existentes no ponto inicial 2 Usando um método para problemas de valor inicial, deixamos o sistema evoluir até o ponto t f 3 Calculamos o erro em relação às condições de contorno no ponto final Se o erro (todas as componentes) for menor que a tolerância, achamos a solução Se não, escolhemos um novo chute voltamos ao passo 2
Método da tentativa e erro (shooting method) Elementos Finitos Método da tentativa e erro 1 Escolhemos n 2 condições contorno arbitrárias (chute) complementanto as n 1 condições já existentes no ponto inicial 2 Usando um método para problemas de valor inicial, deixamos o sistema evoluir até o ponto t f 3 Calculamos o erro em relação às condições de contorno no ponto final Se o erro (todas as componentes) for menor que a tolerância, achamos a solução Se não, escolhemos um novo chute voltamos ao passo 2
Método da tentativa e erro (shooting method) Elementos Finitos Método da tentativa e erro 1 Escolhemos n 2 condições contorno arbitrárias (chute) complementanto as n 1 condições já existentes no ponto inicial 2 Usando um método para problemas de valor inicial, deixamos o sistema evoluir até o ponto t f 3 Calculamos o erro em relação às condições de contorno no ponto final Se o erro (todas as componentes) for menor que a tolerância, achamos a solução Se não, escolhemos um novo chute voltamos ao passo 2
Método da tentativa e erro (shooting method) Elementos Finitos Aprendendo a chutar Queremos, a partir de um conjunto de condições de contorno α = {α 1, α 2,, α n2 }, encontrar um novo conjunto que faça o erro diminuir α = α + α Para isso, escolhemos α tal que [ ] εi ε = J α J = [j ij ] = α j E aproximamos ε i = ε i(α 1,, α j + α j,, α n2 ) ε i (α 1,, α n2 ) α j α j
Método da tentativa e erro (shooting method) Elementos Finitos Aprendendo a chutar Queremos, a partir de um conjunto de condições de contorno α = {α 1, α 2,, α n2 }, encontrar um novo conjunto que faça o erro diminuir α = α + α Para isso, escolhemos α tal que [ ] εi ε = J α J = [j ij ] = α j E aproximamos ε i = ε i(α 1,, α j + α j,, α n2 ) ε i (α 1,, α n2 ) α j α j
Método da tentativa e erro (shooting method) Elementos Finitos Aprendendo a chutar Queremos, a partir de um conjunto de condições de contorno α = {α 1, α 2,, α n2 }, encontrar um novo conjunto que faça o erro diminuir α = α + α Para isso, escolhemos α tal que [ ] εi ε = J α J = [j ij ] = α j E aproximamos ε i = ε i(α 1,, α j + α j,, α n2 ) ε i (α 1,, α n2 ) α j α j
Método da tentativa e erro (shooting method) Elementos Finitos Aprendendo a chutar Queremos, a partir de um conjunto de condições de contorno α = {α 1, α 2,, α n2 }, encontrar um novo conjunto que faça o erro diminuir α = α + α Para isso, escolhemos α tal que [ ] εi ε = J α J = [j ij ] = α j E aproximamos ε i = ε i(α 1,, α j + α j,, α n2 ) ε i (α 1,, α n2 ) α j α j
Método da tentativa e erro (shooting method) Elementos Finitos Exemplo: EDO de segunda ordem 1 Escrevemos y = F(x, y, y ) como 2 EDOs de ordem 1 dy 1 dx = y 2 dy 2 dx = F(x, y, y ) 2 As condições de contorno do problema são, portanto, 3 Chute inicial: dois valores iniciais para y (x 0 ), α 1, α 2 4 Usamos, por exemplo, o método de Runge-Kutta 5 Calculamos o erro ε 1,2 = y 1,2 (x f, α 1,2 ) 6 Como a mudança no erro deverá ser contrária ao erro, temos 7 Repetimos o processo, desde o passo 4 até que ε 2 se torne menor que a tolerância
Método da tentativa e erro (shooting method) Elementos Finitos Exemplo: EDO de segunda ordem 1 Escrevemos y = F(x, y, y ) como 2 EDOs de ordem 1 2 As condições de contorno do problema são, portanto, y 1 (x 0 ) = y 0 e y 1 (x f ) = y f 3 Chute inicial: dois valores iniciais para y (x 0 ), α 1, α 2 4 Usamos, por exemplo, o método de Runge-Kutta 5 Calculamos o erro ε 1,2 = y 1,2 (x f, α 1,2 ) 6 Como a mudança no erro deverá ser contrária ao erro, temos 7 Repetimos o processo, desde o passo 4 até que ε 2 se torne menor que a tolerância
Método da tentativa e erro (shooting method) Elementos Finitos Exemplo: EDO de segunda ordem 1 Escrevemos y = F(x, y, y ) como 2 EDOs de ordem 1 2 As condições de contorno do problema são, portanto, 3 Chute inicial: dois valores iniciais para y (x 0 ), α 1, α 2 4 Usamos, por exemplo, o método de Runge-Kutta 5 Calculamos o erro ε 1,2 = y 1,2 (x f, α 1,2 ) 6 Como a mudança no erro deverá ser contrária ao erro, temos 7 Repetimos o processo, desde o passo 4 até que ε 2 se torne menor que a tolerância
Método da tentativa e erro (shooting method) Elementos Finitos Exemplo: EDO de segunda ordem 1 Escrevemos y = F(x, y, y ) como 2 EDOs de ordem 1 2 As condições de contorno do problema são, portanto, 3 Chute inicial: dois valores iniciais para y (x 0 ), α 1, α 2 4 Usamos, por exemplo, o método de Runge-Kutta para obter y 1 (x f, α 1 ) e y 1 (x f, α 2 ) 5 Calculamos o erro ε 1,2 = y 1,2 (x f, α 1,2 ) 6 Como a mudança no erro deverá ser contrária ao erro, temos 7 Repetimos o processo, desde o passo 4 até que ε 2 se torne menor que a tolerância
Método da tentativa e erro (shooting method) Elementos Finitos Exemplo: EDO de segunda ordem 1 Escrevemos y = F(x, y, y ) como 2 EDOs de ordem 1 2 As condições de contorno do problema são, portanto, 3 Chute inicial: dois valores iniciais para y (x 0 ), α 1, α 2 4 Usamos, por exemplo, o método de Runge-Kutta 5 Calculamos o erro ε 1,2 = y 1,2 (x f, α 1,2 ) e estimamos ε α = ε 2 ε 1 α 2 α 1 6 Como a mudança no erro deverá ser contrária ao erro, temos 7 Repetimos o processo, desde o passo 4 até que ε 2 se torne menor que a tolerância
Método da tentativa e erro (shooting method) Elementos Finitos Exemplo: EDO de segunda ordem 1 Escrevemos y = F(x, y, y ) como 2 EDOs de ordem 1 2 As condições de contorno do problema são, portanto, 3 Chute inicial: dois valores iniciais para y (x 0 ), α 1, α 2 4 Usamos, por exemplo, o método de Runge-Kutta 5 Calculamos o erro ε 1,2 = y 1,2 (x f, α 1,2 ) 6 Como a mudança no erro deverá ser contrária ao erro, temos α = ε 2 ε α 7 Repetimos o processo, desde o passo 4 até que ε 2 se torne menor que a tolerância
Método da tentativa e erro (shooting method) Elementos Finitos Exemplo: EDO de segunda ordem 1 Escrevemos y = F(x, y, y ) como 2 EDOs de ordem 1 2 As condições de contorno do problema são, portanto, 3 Chute inicial: dois valores iniciais para y (x 0 ), α 1, α 2 4 Usamos, por exemplo, o método de Runge-Kutta para obter y 1 (x f, α 1 ) e y 1 (x f, α 2 ) 5 Calculamos o erro ε 1,2 = y 1,2 (x f, α 1,2 ) 6 Como a mudança no erro deverá ser contrária ao erro, temos 7 Repetimos o processo, desde o passo 4 até que ε 2 se torne menor que a tolerância
Método da tentativa e erro (shooting method) Elementos Finitos Método dos elementos finitos Mais uma vez, queremos resolver uma EDO com condições de contorno nas bordas y(x 0 ) = y 0 e y(x f ) = y f Para isso, dividimos o intervalo em N partes iguais de tamanho h, de forma que temos N + 1 pontos (y i, x i ), onde y i = y(x i ) Discretizamos as derivadas da EDO (para uma EDO de segunda ordem, poderíamos escrever) dy i dx = y i+1 y i 1 2h e d 2 y i dx 2 = y i+1 2y i + y i 1 h 2 Introduzindo essa discretização na EDO, calculamos uma nova aproximação para y i em função dos valores de y i±1 Repetimos o processo, até que a precisão desejada seja obtida
Método da tentativa e erro (shooting method) Elementos Finitos Método dos elementos finitos Mais uma vez, queremos resolver uma EDO com condições de contorno nas bordas y(x 0 ) = y 0 e y(x f ) = y f Para isso, dividimos o intervalo em N partes iguais de tamanho h, de forma que temos N + 1 pontos (y i, x i ), onde y i = y(x i ) Discretizamos as derivadas da EDO (para uma EDO de segunda ordem, poderíamos escrever) dy i dx = y i+1 y i 1 2h e d 2 y i dx 2 = y i+1 2y i + y i 1 h 2 Introduzindo essa discretização na EDO, calculamos uma nova aproximação para y i em função dos valores de y i±1 Repetimos o processo, até que a precisão desejada seja obtida
Método da tentativa e erro (shooting method) Elementos Finitos Método dos elementos finitos Mais uma vez, queremos resolver uma EDO com condições de contorno nas bordas y(x 0 ) = y 0 e y(x f ) = y f Para isso, dividimos o intervalo em N partes iguais de tamanho h, de forma que temos N + 1 pontos (y i, x i ), onde y i = y(x i ) Discretizamos as derivadas da EDO (para uma EDO de segunda ordem, poderíamos escrever) dy i dx = y i+1 y i 1 2h e d 2 y i dx 2 = y i+1 2y i + y i 1 h 2 Introduzindo essa discretização na EDO, calculamos uma nova aproximação para y i em função dos valores de y i±1 Repetimos o processo, até que a precisão desejada seja obtida
Método da tentativa e erro (shooting method) Elementos Finitos Método dos elementos finitos Mais uma vez, queremos resolver uma EDO com condições de contorno nas bordas y(x 0 ) = y 0 e y(x f ) = y f Para isso, dividimos o intervalo em N partes iguais de tamanho h, de forma que temos N + 1 pontos (y i, x i ), onde y i = y(x i ) Discretizamos as derivadas da EDO (para uma EDO de segunda ordem, poderíamos escrever) dy i dx = y i+1 y i 1 2h e d 2 y i dx 2 = y i+1 2y i + y i 1 h 2 Introduzindo essa discretização na EDO, calculamos uma nova aproximação para y i em função dos valores de y i±1 Repetimos o processo, até que a precisão desejada seja obtida
Método da tentativa e erro (shooting method) Elementos Finitos Método dos elementos finitos Mais uma vez, queremos resolver uma EDO com condições de contorno nas bordas y(x 0 ) = y 0 e y(x f ) = y f Para isso, dividimos o intervalo em N partes iguais de tamanho h, de forma que temos N + 1 pontos (y i, x i ), onde y i = y(x i ) Discretizamos as derivadas da EDO (para uma EDO de segunda ordem, poderíamos escrever) dy i dx = y i+1 y i 1 2h e d 2 y i dx 2 = y i+1 2y i + y i 1 h 2 Introduzindo essa discretização na EDO, calculamos uma nova aproximação para y i em função dos valores de y i±1 Repetimos o processo, até que a precisão desejada seja obtida