Obtenção da Fórmula

A primeira regra de Simpson é obtida aproximando-se a função \(f(x)\) por um polinômio interpolador de 2º Grau:

\[f(x) \doteq P_2(x) = y_1 +z \Delta_{y_1} + \frac{(z)(z-1)}{2!}\cdot \Delta^2_{y_1}\]

Logo:

\[I = h\left[2y_1+2(y_2-y_1) + \frac{1}{3}(y_3-2y_2+y_1) \right] \]

Resultando:

Fórmula Composta

Como foi feito com a regra de trapézios, deve-se subdividir o intervalo de integração \([a, b]\) em \(n\) subintervalos iguais de amplitude \(h\) e a cada par de subintervalos aplicar a 1ª regra de Simpson

Como a regra de Simpson é aplicada em pares de subintervalos, o número \(n\) de subintervalos deverá ser sempre par.

\[n = \frac{b-a}{n}\] \[I = \int_{a}^{b}{f(x)}dx \]

Aplicando para os subintervalos:

\[I=\frac{h}{3}\underbrace{(y_1+4y_2+y_3)}_{\textrm{1º subintervalo}}+ \frac{h}{3}\underbrace{(y_2+4y_3+y_4)}_{\textrm{2º subintervalo}} + \cdots + \frac{h}{3}\underbrace{(y_{n-2}+4y_{n-1}+y_n)}_{\textrm{nº subintervalo}}\]

Em evidência:

Exemplo 1

Calcule o valor da integral definida através da 1ª Regra de Simpson com \(n=4\):

\[\int_{0.8}^{2.2}{x^3-\sqrt{e^{x^2}}+1}dx\]

De forma gráfica:

Integral

Inicialmente vamos definir a altura dos pontos:

\[h=\frac{2.2 - 0.8}{4} = 0.35\]

Com isso, vamos calcular os valores de \(y_i\)

\(i\) \(x_i\) \(y_i\)
1 0.8 0.134872
2 1.15 0.583663
3 1.5 1.29478
4 1.85 1.79575
5 2.2 0.402141

Ajustando a expressão genérica para a quantidade \(n\) de elementos:

\[I = \frac{h}{3}(y_1+4y_2+2y_3+4y_4+y_5)\]

E desenvolvendo o cálculo:

\[I = \frac{0.35}{3} \times ( 0.134872 + (4 \times 0.583663) + (2 \times 1.29478) + (4 \times 1.79575) + 0.402141 ) = 1.47516\]

Esse resultado pode ser visto no gráfico:

Integral

Exemplo 2

Calcule o valor da integral abaixo através da 1ª Regra de Simpson desta vez com \(n=8\):

\[\int_{0.8}^{2.2}{ x^3-\sqrt{e^{x^2}}+1}dx\]

Calculando a altura dos pontos:

\[h=\frac{2.2 - 0.8}{8} = 0.175\]

Os valores de \(y_i\)

\(i\) \(x\) \(y\)
1 0.8 0.134872
2 0.975 0.318343
3 1.15 0.583663
4 1.325 0.920571
5 1.5 1.29478
6 1.675 1.6328
7 1.85 1.79575
8 2.025 1.53344
9 2.2 0.402141

A expressão genérica para \(n = 8\):

\[I = \frac{h}{3}(y_1+4y_2+2y_3+4y_4+2y_5 + 4y_6 + 2y_7 + 4y_8 + y_9)\]

E desenvolvendo o cálculo:

\[I = \frac{0.175}{3} \times ( 0.134872 + (4 \times 0.318343) + (2 \times 0.583663) + \] \[(4 \times 0.920571) + (2 \times 1.29478) + (4 \times 1.6328) + (2 \times 1.79575) + \] \[(4 \times 1.53344) + 0.402141 ) = 1.48785\]

Esse resultado pode ser visto no gráfico:

Integral

Aplicativo interativo:

Utilize o aplicativo a seguir para simular outros casos:

Exemplo 3

Dessa vez, é dada a função \( y = f(x)\) e a tabela de valores de \(y\). Calcular o valor de:

\[i=\int_{-1.5}^{0.5}{f(x)}dx\]
\(i\) \(y\)
1 3.44574
2 1.98118
3 1.25112
4 1.00258
5 0.990773
6 0.981514
7 0.752583

No cálculo de \(h\), lembre que o número de subintervalos é \(n = i-1\):

\[h = \frac{b-a}{n} =\frac{0.5-(-1.5)}{6} = 0.33333\]

A forma genérica:

\[I = \frac{h}{3}(y_1+ 4y_2 + 2y_3 + 4y_4 + 2y_5+ 4y_6 + y_7)\]

Desenvolvendo o cálculo:

\[I = \frac{0.33333}{3} \times ( 3.44574 + (4 \times 1.98118) + (2 \times 1.25112) + \] \[(4 \times 1.00258) + (2 \times 0.990773) + (4 \times 0.981514) + 0.752583 ) = 2.72702\]

Dicas de programação em Python

Aplicando uma função a uma lista

Depois de criada a lista de pontos \(x\), podemos aplicar cada valor à função \(f\) para obter a lista correspondente de valores de \(y\).

Por exemplo, dada a lista \(x=\{1, 1.5, 2, 2.5, 3\}\) e a função \(f(x) = x^3- 3 x^2+x -2\), o cálculo ficaria:

\(i\) \(x_i\) \(y_i\)
1 1 \(f(1) = 1^3- 3\times(1)^2 + 1 -2 = -3\)
2 1.5 \(f(1.5) = 1.5^3- 3\times(1.5)^2 + 1.5 -2 = -3.875\)
3 2 \(f(2) = 2^3- 3\times(2)^2 + 2 -2 = -4\)
4 2.5 \(f(2.5) = 2.5^3- 3\times(2.5)^2 + 2.5 -2 = -2.625\)
5 3 \(f(3) = 3^3- 3\times(3)^2 + 3 -2 = 1\)

Resultando na lista de valores:

\[y = \{-3, -3.875, -4, -2.625, 1\}\]

Em Python, isso pode ser escrito diretamente com uma função e uma compreensão de lista:

def f(x):
    return x**3 - 3*x**2 + x - 2

x = [1, 1.5, 2, 2.5, 3]
y = [f(valor) for valor in x]

print(y)

Se a função já estiver definida no programa, basta reutilizá-la sempre que uma nova lista de pontos for criada:

x = [1, 1.5, 2, 2.5, 3]
y = list(map(f, x))

print(y)

A função map aplica f a cada elemento de x. A chamada list(...) transforma o resultado em uma lista comum.

A sequência de entrada deve conter valores numéricos. Uma lista de Python é suficiente para os exemplos desta página.

Outra maneira de aplicar a função

Quando os cálculos ficam maiores, a biblioteca numpy permite aplicar a expressão de forma vetorizada:

import numpy as np

x = np.array([1, 1.5, 2, 2.5, 3])
y = x**3 - 3*x**2 + x - 2

print(y)

Com numpy, operações como potência, multiplicação e soma são aplicadas elemento a elemento no vetor. Isso evita escrever laços explícitos quando a expressão é simples.

Atividade

Utilizando a 1ª regra de Simpson, calcule o valor da integral com a quantidade de pontos definidos.

  • \[ \int_{1}^{8}{\frac{x^4}{e^x}}dx \]

    Com \(n = 2\)

  • \[ \int_{1}^{8}{\frac{x^4}{e^x}}dx \]

    Com \(n = 4\)

  • \[ \int_{1}^{8}{\frac{x^4}{e^x}}dx \]

    Com \(n = 8\)