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 é 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 são constantes a serem determinadas e os termos são combinações lineares da função diferencial a ser resolvida. Como visto naquele mesmo post, o número de ‘s escolhidos determina o grau do método de Runge-Kuta.

Quando , 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 , 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.

 

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).