6.1.5 Equações Diferenciais Ordinárias — Métodos de Runge-Kuta — Método de Runge-Kuta de Terceira Ordem

Conforme mostrado no post do método de Runge-Kuta de segunda ordem, a EDO é resolvida pela fórmula iterativa:

\( y_{i+1} = y_i + \phi (x_i, y_i, h) h \)

onde \(\phi \) é a função incremento, que quanto mais elementos possuir, mais acurada é a aproximação:

\( \phi = a_1 k1 + a_2 k_2 + \cdots + a_n k_n \)

onde os \(a_i \) são constantes a serem determinadas e os termos \(k_i \) são combinações lineares da função diferencial a ser resolvida. Como visto naquele mesmo post, o número \(n \) de \(k \) ‘s escolhidos determina o grau do método de Runge-Kuta.

Quando \(n=3 \) , a dedução segue parecida com a dos métodos de segunda ordem, aumentando apenas o número de incógnitas e equações. Mais especificamente, enquanto nos métodos de ordem dois tínhamos que determinar apenas uma incógnita \(a_2 \) , na terceira ordem temos de especificar valores para duas das oito incógnitas. Ralston e Rabinowitz[1] fornecem os valores das incógnitas para que o erro de truncamento tenha limitante mínimo. Para isso, resolvemos iterativamente o problema com a fórmula

\( y_{i+1} = y_i + \dfrac{1}{6} (k_1 + 4 k_2 + k_3) h \)

onde

\( k_1 = f(x_i, y_i) \)

\( k_2 = f(x_i + \frac{1}{2} h, y_i + \frac{1}{2} k_1 h) \)

e

\( k_3 = f(x_i + h, y_i – k_1 h + 2 k_2 h) \)

 

1. Implementação

 

def ralston3order(f, x, y, h):
    k1 = f(x, y)
    k2 = f(x + 0.5 * h, y + 0.5 * k1 * h)
    k3 = f(x + h, y - k1 * h + 2 * k2 * h)
    y1 = y + (1. / 6.) * (k1 + 4 * k2 + k3) * h
    x1 = x + h
    return (x1, y1)

Um exemplo de utilização dessa função pode ser obtido em http://www.sawp.com.br/code/ode/runge_kuta_order_3.py.

 

2. Copyright

Este documento é disponível sob a licença Creative Commons. As regras dos direitos de cópia deste conteúdo estão acessíveis em http://creativecommons.org/licenses/by-nc-nd/2.5/br/.

References


[1] Anthony Ralston and Philip Rabinowitz, A First Course in Numerical Analysis (2nd ed.), McGraw-Hill and Dover, (2001).
[2] N.B Franco, Cálculo Numérico, Pearson Prentice Hall (2006).