O método de Simpsons é usado para fazer a Integração numérica de funções. Esse método consiste em aproximar a função por um polinômio de grau para então obter a área do gráfico da função aproximada.
Dada uma função , é possível aproximar sua integral definida em um intervalo através da seguinte definição:
com , , .
Vale notar que esse método produz resultados exatos caso seja um polinômio de grau menor ou igual a . Caso contrário, o limitante superior para o erro da aproximação é dado pela seguinte expressão:
onde .
O método pode ser implementado em python de uma maneira relativamente simples:
import numpy as np
def simpsons(i, f):
x0 = i[0]
x1 = (i[0] + i[1]) / 2
x2 = i[1]
h = (x2 - x0) / 2
return h / 3 * (f(x0) + 4 * f(x1) + f(x2))
i = [0, 1]
f = lambda x: np.exp(-(x ** 2))
print(simpsons(i, f))
De forma similar ao método dos trapézios, é possível subdividir o intervalo de integração e aplicar o método para cada um dos subintervalos. Note entretanto que, pela natureza do método, é necessário subdividir o intervalo de integração em um número par de subintervalos. Dessa forma, o método de Simpson repetido para subintervalos é definido por:
O limitante superior para o erro da aproximação é dado pela soma dos erros obtidos em cada subintervalo, dessa forma, para subintervalos:
onde .
O método de Simpsons repetido pode ser implementado em python da seguinte forma:
import numpy as np
def simpsons(i, f, n):
x, h = np.linspace(i[0], i[1], num=n + 1, retstep=True)
sum = f(x[0]) + f(x[n])
for i in range(1, n):
sum = sum + ((2 if i % 2 == 0 else 4) * f(x[i]))
return (h / 3) * sum
i = [0, 6]
f = lambda x: np.cos(4 * x)
print(simpsons(i, f, 92))