Obtenção da Fórmula
A fórmula de Gauss para o cálculo de integral numérica ou quadratura gaussiana, como é mais conhecida, é uma fórmula que fornece um resultado bem mais preciso que os métodos anteriores com o mesmo número de pontos.
Na aplicacação da quadratura gaussiana, os pontos não são mais escolhidos pela pessoa que utiliza o método, mas seguem um critério bem definido.
Partindo o problema de se determinar:
\[ I = \int_{a}^{b}{f(x)}dx\]Inicialmente, é alterado o intervalo de integração, passado de \([a, b]\) para \([-1, 1]\). Isto é feito através de troca de variável:
\[x = \frac{1}{2}(b-a)t + \frac{1}{2}(b+a)\] \[f(x) = f\left[\frac{1}{2}(b-a)t + \frac{1}{2}(b+a) \right] \] \[I = \int_{a}^{b}{f(x)}dx = \int_{-1}^{1}{F(t)}dt\]Resultando:
A fórmula de Gauss fornece valores exatos para a integração de polinômios de grau \((2n -1)\), onde \(n\) é o número de pontos.
Para dois pontos, a fórmula de Gauss é:
\[I = \int_{-1}^{1}{F(t)}dt = A_1F(t_1) +A_2F(t_2) \]Onde \(A_1\), \(A_2\), \(t_1\) e \(t_2\) são incógnitas a se determinar e independentes da Função \(F\) escolhida.
Para determinar estas quatros incógnitas são necessárias quatro equações que podem ser obtidas ao se considerar \(F(t)\) = \(t^k\), \(k = 0,1,2,3\). Então:
\[\int_{-1}^{1}{t^k}dt = A_1F(t_1^k) +A_2F(t_2^k)\]Para:
\[ k = 0 \Rightarrow \int_{-1}^{1}{t^0}dt = A_1F(t_1^0) +A_2F(t_2^0) \] \[ k = 1 \Rightarrow \int_{-1}^{1}{t^1}dt = A_1F(t_1^1) +A_2F(t_2^1)\] \[ k = 2 \Rightarrow \int_{-1}^{1}{t^2}dt = A_1F(t_1^2) +A_2F(t_2^2)\] \[ k = 3 \Rightarrow \int_{-1}^{1}{t^3}dt = A_1F(t_1^3) +A_2F(t_2^3)\]Ou ainda:
\[\left\{ \begin{matrix} 2 & A_1 + A_2 \\ 0 & A_1t_1 + A_2t_2 \\ {2}/{3} & A_1t_1^2 + A_2t_2^2 \\ 0 & A_1t_1^3 + A_2t_2^3 \\ \end{matrix} \right.\]Resolvendo o sistema temos:
\[A_1=A_2 = 1\] \[t_1 = -t_2 = \frac{1}{\sqrt{3}}\]Substituindo os valores encontrados, tem-se a fórmula de Gauss para dois pontos:
\[I_G = F(-\frac{1}{\sqrt{3}}) + F(\frac{1}{\sqrt{3}})\]De forma genérica, a fórmula para a quadratura gaussiana é baseada em propriedades dos polinômios de Legendre e definida por:
\[I = \int_{-1}^{1}{F(t)}dt = \sum_{i=1}^{n}{A_iF(t_i)}\]Como os valores de \(A_i\) e \(t_i\) são fixos, os valores para outras quantidades de pontos está disponível na tabela abaixo até \(n=5\):
| Número de Pontos | \(t_i\) | \(A_i\) |
|---|---|---|
| 1 | \(0\) | \(2\) |
| 2 | \( \pm {\frac {1}{\sqrt {3}}} \) | \(1\) |
| 3 | \(0\) | \({\frac {8}{9}} \) |
| \(\pm {\sqrt {\frac {3}{5}}} \) | \({\frac {5}{9}} \) | |
| 4 | \(\pm {\sqrt {{\frac {3}{7}}-{\frac {2}{7}}{\sqrt {\frac {6}{5}}}}} \) | \({\frac {18+{\sqrt {30}}}{36}} \) |
| \(\pm {\sqrt {{\frac {3}{7}}+{\frac {2}{7}}{\sqrt {\frac {6}{5}}}}} \) | \(\frac {18-{\sqrt {30}}}{36} \) | |
| 5 | \(0\) | \({\frac {128}{225}} \) |
| \(\pm {\frac {1}{3}}{\sqrt {5-2{\sqrt {\frac {10}{7}}}}} \) | \({\frac {322+13{\sqrt {70}}}{900}} \) | |
| \(\pm {\frac {1}{3}}{\sqrt {5+2{\sqrt {\frac {10}{7}}}}} \) | \({\frac {322-13{\sqrt {70}}}{900}} \) |
Exemplo
Para exemplificar a resolução, vamos resolver a integral com \(n=3\):
\[\int_{-0.5}^{1}{-\frac{x^4}{e^{cos(x^2)}} + 2} dx\]Inicialmente vamos desenvolver a fórmula genérica aplicada para 3 pontos:
\[I = \int_{-1}^{1}{F(t)}dt = \sum_{i=1}^{3}{A_iF(t_i)} = A_1F(t_1) + A_2F(t_2) + A_3F(t_3)\]Da tabela de valores de \(t_i\) e \(A_i\) vamos utilizar a linha que se refere a valor de \(n=3\):
| Número de Pontos | \(t_i\) | \(A_i\) |
|---|---|---|
| 3 | \(0\) | \({\frac {8}{9}} \) |
| \(\pm {\sqrt {\frac {3}{5}}} \) | \({\frac {5}{9}} \) |
Com isso teremos:
\[ I = \frac {8}{9} F(0) + \frac {5}{9} F(\sqrt {\frac {3}{5}}) + \frac {5}{9} F(-\sqrt {\frac {3}{5}})\]Siga o cálculo de cada parte dessa equação:
Calculando o primeiro conjunto de valores \(A_1F(t_1)\)
Lembrando que:
\[F(t) = \frac{b-a}{2} \times f\left(\frac{b-a}{2}t + \frac{b+a}{2} \right)\]Desenvolvemos o valor de \(F(t_1)\):
\[ F(t_1) = \frac{1-(-0.5)}{2} \times f\left(\frac{1-(-0.5)}{2}t + \frac{1+(-0.5)}{2} \right)= 0.75 \times f\left(0.75t + 0.25 \right) \]Portanto:
\[F(t_1) = 0.75 \times f\left(0.75t + 0.25 \right)\]Desenvolvendo:
\[ F(0) = 0.75 \times f\left(0.75 \times 0 + 0.25 \right) \] \[ F(t_1) = 0.75 f(0.25) \]Substituindo a função \(f\):
\[ F(t_1) = 0.75 \times -\frac{0.25^4}{e^{cos(0.25^2)}} \] \[ F(t_1) = 0.75 \times 1.99856 \] \[ F(t_1) = 1.49892 \]E concluindo o cálculo de \(A_1F(t_1)\):
\[ A_1F(t_1) = 0.888889 \times 1.49892 = 1.33237 \]Calculando o segundo conjunto de valores \(A_2F(t_2)\)
O valor de \(F(t_2)\):
\[ F(-0.774597) = 0.75 \times f\left(0.75 \times -0.774597 + 0.25 \right) \] \[F(t_2) = 0.75 f(0.830948)\] \[ F(t_2) = 0.75 \times -\frac{0.830948^4}{e^{cos(0.830948^2)}} \] \[ F(t_2) = 0.75 \times 1.77947 \] \[ F(t_2) = 1.3346 \]Concluindo o cálculo de \(A_2F(t_2)\):
\[ A_2F(t_2) = 0.555556 \times 1.3346 = 0.741444 \]Calculando o último conjunto de valores \(A_3F(t_3)\)
O valor de \(F(t_3)\):
\[ F(-0.774597) = 0.75 \times f\left(0.75 \times -0.774597 + 0.25 \right) \] \[ F(t_3) = 0.75 f(-0.330948) \] \[ F(t_3) = 0.75 \times -\frac{-0.330948^4}{e^{cos(-0.330948^2)}} \] \[ F(t_3) = 0.75 \times 1.99556 \] \[ F(t_3) = 1.49667 \]Concluindo o cálculo de \(A_3F(t_3)\):
\[ A_3F(t_3) = 0.555556 \times 1.49667 = 0.831483 \]Somando os resultados:
\[ \sum_{i=1}^{3}{A_iF(t_i)} = A_1F(t_1) + A_2F(t_2) + A_3F(t_3) = 1.33237 + 0.741444 + 0.831483 = 2.9053\]Próximo do resultado exato: \(2.90127824988 \)
Dicas de programação em Python
A seguir é apresentado um programa que armazena os valores de \(t_i\) e \(A_i\) em uma lista e mostra os pontos conforme o número escolhido:
from math import sqrt
pontos_gauss = {
1: [(0, 2)],
2: [(1/sqrt(3), 1), (-1/sqrt(3), 1)],
3: [(0, 8/9), (sqrt(3/5), 5/9), (-sqrt(3/5), 5/9)],
4: [
(sqrt(3/7 - 2/7*sqrt(6/5)), (18 + sqrt(30))/36),
(-sqrt(3/7 - 2/7*sqrt(6/5)), (18 + sqrt(30))/36),
(sqrt(3/7 + 2/7*sqrt(6/5)), (18 - sqrt(30))/36),
(-sqrt(3/7 + 2/7*sqrt(6/5)), (18 - sqrt(30))/36),
],
5: [
(0, 128/225),
(1/3*sqrt(5 - 2*sqrt(10/7)), (322 + 13*sqrt(70))/900),
(-1/3*sqrt(5 - 2*sqrt(10/7)), (322 + 13*sqrt(70))/900),
(1/3*sqrt(5 + 2*sqrt(10/7)), (322 - 13*sqrt(70))/900),
(-1/3*sqrt(5 + 2*sqrt(10/7)), (322 - 13*sqrt(70))/900),
],
}
n = 5
for i, (t, A) in enumerate(pontos_gauss[n], start=1):
print(f"t({i}) = {t:.6f}, A({i}) = {A:.6f}")
Resolvendo integrais em Python:
Para resolver integrais diretamente em Python, podemos usar a biblioteca scipy para cálculo numérico.
O mesmo resultado pode ser obtido por código:
from math import exp, sqrt
from scipy.integrate import quad
def f(x):
return x**3 - sqrt(exp(x**2)) + 1
resultado, erro_estimado = quad(f, 0.8, 2.2)
print(resultado)
Essa forma é mais útil quando o cálculo precisa ser repetido ou comparado com métodos numéricos implementados manualmente.
Atividade
Calcule o valor da integral abaixo através do método de Quadratura Gaussiana com o número de pontos definido:
-
\[ \int_{-2}^{1.5}{x^5-5x^3+2x^2+5x+2}dx \]
Com \(n = 2\)
-
\[ \int_{-2}^{1.5}{x^5-5x^3+2x^2+5x+2}dx \]
Com \(n = 3\)
-
\[ \int_{-2}^{1.5}{x^5-5x^3+2x^2+5x+2}dx \]
Com \(n = 5\)