6.1.7 Equações Diferenciais Ordinárias — Métodos de Runge-Kuta — Método de Butcher (Quinta Ordem)
Assim como nas ordens menores, o método de Butcher consiste em utilizar ordens superiores para resolver a EDO numericamente. Uma fórmula a ser utilizada é:
onde
$$k_1 = f(x_i, y_i) $$
$$k_2 = f(x_i + \frac{1}{4} h, y_i + \frac{1}{4} k_1 h) $$
$$k_3 = f(x_i + \frac{1}{4} h, y_i + \frac{1}{8} k_1 h + \frac{1}{8} k_2 h) $$
$$k_4 = f(x_i + \frac{1}{2} h, y_i – \frac{1}{2} k_2 h + k_3 h) $$
$$k_5 = f(x_i + \frac{3}{4} h, y_i + \frac{3}{16} k_1 h + \frac{9}{16} k_4 h) $$
e
$$k_6 = f(x_i + h, y_i – \frac{3}{7} k_1 h + \frac{2}{7} k_2 h + \frac{12}{7} k_3 h – \frac{12}{7} k_4 h + \frac{8}{7} k_5 h)$$
Se voltarmos ao post onde discutimos sobre a Regra de Boole, notaremos a similaridade daquela fórmula com o método de Butcher. Fórmulas como essa, que utilizam são menos comuns porque o ganho de acurácia começa a ser mínimo, enquanto o custo computacional tende a aumentar.
1. Implementação
def butcher(f, x, y, h):
k1 = f(x, y)
k2 = f(x + 0.25 * h, y + 0.25 * k1 * h)
k3 = f(x + 0.25 * h, y + 0.125 * k1 * h + 0.125 * k2 * h)
k4 = f(x + 0.5 * h, y - 0.5 * k2 * h + k3 * h)
k5 = f(x + 0.75 * h, y + 0.1875 * k1 * h + 0.5625 * k4 * h)
(a1, a2, a3, a4) = (-3.0 / 7.0, 2.0 / 7.0, 12.0 / 7.0, 8.0 / 7.0)
delta = a1 * k1 * h + a2 * k2 * h + a3 * k3 * h - a3 * k4 * h + a4 * k5 * h
k6 = f(x + h, y + delta)
y1 = y + (1.0 / 90) * (7 * k1 + 32 * k3 + 12 * k4 + 32 * k5 + 7 * k6) * 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_5.py.
2. Copyright
Este documento está 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/.