O método do ponto médio é uma abordagem do tipo preditor-corretor, que utiliza o método de Euler para prever um valor no ponto médio do intervalo. Isto é,

$$ y_{i+1/2} = y_i + f(x_i, y_i) \frac{h}{2} $$

é usado como predito para calcular a inclinação do ponto médio:

$$ y_{i+1/2}’ = f(x_{i+1/2}, y_{i+1/2}) $$

que é a aproximação da inclinação média para todo intervalo. Essa inclinação é então usada para extrapolar o novo valor de ,

$$ y_{i+1} = y_i + f(x_{i+1/2}, y_{i+1/2}) h $$

que é a fórmula do método do ponto médio.

 

1. Implementação

def integral_midpoint(f, xi, xe, y0, n=1e6):
    """
    Numerical integration for solve ODE's using Midpoint Method

    integral = integral_midpoint(f, xi, xe, n=1e6)

    INPUT:
      * f: derivative function f(x, y) = dy/dx
      * xi: beginning of integration interval
      * xe: end of integration interval
      * y0: initial estimative for y
      * n: number of points used

    return: \int_{xi}^{xe} f(x)

    Author: Pedro Garcia [sawp@sawp.com.br]
    see: http://www.sawp.com.br

    License: Creative Commons
             http://creativecommons.org/licenses/by-nc-nd/2.5/br/

    Sep 2012
    """
    def midpoint(x, y, h):
        pred = y + f(x, y) * h / 2.0
        corr = y + f(x + h / 2.0, pred) * h
        return (x + h, corr)

    def integrator(x, y, h, n):
        for i in xrange(n):
            (x, y) = midpoint(x, y, h)
        return y

    (y, x) = (y0, xi)
    h = abs(xe - xi) / n
    return integrator(x, y, h, int(n))

Um exemplo de utilização dessa função pode ser obtido em http://www.sawp.com.br/code/ode/midpoint.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).