Métodos Computacionais Numéricos e Algébricos
com Maple
Integração Numérica
Fernando Deeke Sasse
CCT - UDESC
[email protected]
Integração Numérica
Quadratura de Gauss
Métodos de Newton-Cotes
Introdução
As fórmulas de Newton-Cotes formam os esquemas mais comuns de integração numérica.
Eles consistem na estratégia de substituir um função complicada ou que não possui primitiva
ou dada numa tabela, por uma função aproximada que é fácil de integrar, ou seja,
,
sendo
um polinômio da forma
.
O método mais simples consiste em escolher um polinômio constante, que corresponde à soma
de Riemann, um conceito usado para introduzir o conceito de integral definida.
Normalmente a aproximação é feita num pequeno intervalo. Uma integral definida num
intervalo grande é então realizada somando-se as integrais aproximadas em um dado número
de subintervalos. Tal soma de Riemann pode ser realizada de diferentes modos,
correspondentes à posição escolhida que define a altura de cada retângulo. Por exemplo,
consideremos a integral:
.
O valor exato desta integral é
> with(Student[Calculus1]):
> ApproximateInt(x^2, 0..1, 'partition' = 4, 'method' =
lower, 'partitiontype' = subintervals, 'output' = 'plot',
'boxoptions' = ['filled' = ['transparency'=.5]]);
1
0
1
x
1
f x dx, where f x = x2 and
A lower Riemann sum approximation of
0
the partition is uniform. The approximate value of the integral is
0.2187500000. Number of partitions used: 4.
A soma de Riemann superior é dada por
> value(%);
1
0
1
x
1
f x dx, where f x = x2 and
A lower Riemann sum approximation of
0
the partition is uniform. The approximate value of the integral is
0.2187500000. Number of partitions used: 4.
> ApproximateInt(x^2, 0..1, 'partition' = 4, 'method' =
upper, 'partitiontype' = subintervals, 'output' = 'plot',
'boxoptions' = ['filled' = ['transparency'=.5]]);
1
0
1
x
1
f x dx, where f x = x2 and
An upper Riemann sum approximation of
0
the partition is uniform. The approximate value of the integral is
0.4687500000. Number of partitions used: 4.
Uma melhor aproximação consiste na soma de Riemann de ponto médio:
> ApproximateInt(x^2, 0..1, 'partition' = 4, 'method' =
midpoint, 'partitiontype' = subintervals, 'output' =
'plot', 'boxoptions' = ['filled' = ['transparency'=.5]]);
1
0
1
x
1
f x dx, where f x = x2
A midpoint Riemann sum approximation of
0
and the partition is uniform. The approximate value of the integral is
0.3281250000. Number of partitions used: 4.
(1.2.1.1)
Método Trapezoidal
Um método que dá resultados ainda melhores que o da soma de Riemann é o chamado método
do trapézio, que consiste em aproximar a integral da função em cada intervalo por um
polinômio de primeiro grau. A integral da função num intervalo qualquer é dada então pela
soma das áreas de todos os trapézios. Por exemplo consideremos novamente a integral:
Tomando novamente 4 intervalos temos
> ApproximateInt(x^2, 0..1, 'partition' = 4, 'method' =
trapezoid, 'partitiontype' = subintervals, 'output' =
'plot', 'boxoptions' = ['filled' = ['transparency'=0.9]]);
1
0
1
x
1
f x dx using trapezoid rule, where f x = x2 and
An approximation of
0
the partition is uniform. The approximate value of the integral is
0.3437500000. Number of partitions used: 4.
O valor exato da integral é
.
Deduziremos agora uma fórmula para calcular a integral de uma função qualquer
, não
divergente em um dado intervalo
. Num dado subintervalo
a área do
correspondente trapézio é dada por
.
Suponhamos que temos
pontos igualmente espaçados
.
Consequentemente temos subintervalos de tamanho dado por
.
A integral de
no intervalo
é dada por
.
Usando a aproximação do trapézio em cada subintervalo temos
=
.
Exemplo 1 Calcule a integral
utilizando o método do trapézio com
Definamos o integrando:
> f:=x->x^2;
intervalos.
(1.2.2.1)
O espaçamento dos intervalos, para
> n:=10:a:=0:b:=1.:
> h:=(b-a)/n;
, é dado por
(1.2.2.2)
Definimos a malha de
pontos:
> X:=[seq(a+i*h,i=0..n)];
(1.2.2.3)
Implementemos a fórmula do método do trapézio:
> S:=h/2*(f(X[1])+f(X[n+1])+2*sum(f(X[k]),k=2..n));
(1.2.2.4)
Definamos um procedimento que tem como entrada uma função, um intervalo, e o número de
nós.
> restart:
> trapezio:=proc(f,a,b,n)
local h,k,X,S,g;
g:=unapply(f,x):
h:=(b-a)/n;
X:=[seq(a+i*h,i=0..n)];
S:=evalf(h/2*(g(X[1])+g(X[n+1])+2*sum(g(X[k]),k=2..n)))
;
end:
> G:=x^2;
(1.2.2.5)
Portanto, com
,
> trapezio(G,0,1,20);
0.3337500000
Com
0,
> trapezio(G,0,1,10000);
0.3333333350
Observamos que a convergência para o valor correto 1/3 é muito lenta.
(1.2.2.6)
(1.2.2.7)
Erro no método trapezoidal simples
Esta dedução segue este vídeo (http://www.youtube.com/watch?v=NAIGuh5I3Io) do Prof. L.
A. F. Coelho. Consideremos o erro cometido na aplicação do método trapezoidal aplicado a
um único intervalo. Se pudéssemos saber que a primitiva de
para a integral no intervalo
:
é
, poderíamos escrever
.
A integral aproximada é dada pela fórmula da área do trapézio:
.
O erro cometido na integração numérica é então definido por
.
Usando a expansão em série de Taylor temos
Como
,
Portanto, a integral exata torna-se
Por outro lado,
de modo que
e
.
Truncando a série em
por
temos que, de acordo com o teorema de Taylor, o erro é dado
,
onde
.
Erro no método trapezoidal composto
Somando os erros individuais para os diversos trapézios temos, usando o fato de que para
nós igualmente espaçados,
/ ,
,
sendo um número no intervalo
no intervalo
e escrever:
. Na prática podemos estimar o erro maximizando
Na fórmula acima o somatório começa em
, pois temos
é definido dentro do intervalo
.
Exemplo 1 Utilizando a regra do trapézio, calcule
pontos e intervalos. Cada
com erro de no máximo
.
Solução
Para calcular o erro máximo cometido devemos maximizar a segunda derivada de
, ou seja,
> restart:
> f:=exp(-x^3+x^2);
(1.2.2.8)
A segunda derivada desta função é dada por
> d2f:=diff(f,x$2);
(1.2.2.9)
Façamos o gráfico desta função:
> plot(abs(d2f),x=1..2);
3
2
1
1
2
x
Vemos imediatamente que o valor máximo procurado
,
ou seja,
> M:=abs(evalf(subs(x=1,d2f)));
(1.2.2.10)
Como
,
devemos agora calcular :
> eq:=10^(-5)=(2-1)^3*M/(12*n^2);
(1.2.2.11)
> sol:=solve(eq,n);
(1.2.2.12)
Portanto, se
usando a fórmula
o erro será garantidamente menor que
. Calculemos agora a integral,
.
Temos aqui :
> n:=159: a:=1:b:=2: h:=(b-a)/n:
> F:=x->exp(-x^3+x^2);
(1.2.2.13)
> X:=[evalf(seq(a+h*i,i=0..159))]:
Portanto,
> Iap:=h/2*(F(X[1])+F(X[160])+2*sum(F(X[i]),i=2..159));
(1.2.2.14)
O Maple fornece uma aproximação ótima para esta integral:
> Iap2:=evalf(int(F(x),x=1..2));
(1.2.2.15)
Comparando este resultado com o do método do trapézio temos:
> Erro:=Iap-Iap2;
(1.2.2.16)
Ou seja, aproximadamente
<
.
Exemplo 2 Utilizando a regra do trapézio, calcule
com erro de no máximo
/2.
> restart:
> f:=sin(x)/x;
(1.2.2.17)
A segunda derivada desta função é dada por
> d2f:=diff(f,x$2);
(1.2.2.18)
Façamos o gráfico desta função:
> plot(abs(d2f),x=0..1);
0
1
x
Vemos imediatamente que o valor máximo procurado
,
ou seja,
> M:=abs(evalf(limit(d2f,x=0)));
(1.2.2.19)
Como
,
devemos agora calcular :
> eq:=10^(-5)/2=(1-0)*M/(12*n^2);
(1.2.2.20)
> sol:=solve(eq,n);
(1.2.2.21)
Portanto, se
o erro será garantidamente menor que
usando a fórmula
/2 Calculemos agora a integral,
.
Temos aqui :
> n:=75: a:=0:b:=1: h:=(b-a)/n:
> F:=x->sin(x)/x;
(1.2.2.22)
> X:=[evalf(seq(a+h*i,i=0..75))]:
Portanto,
> Iap:=h/2*(limit(F(t),t=0)+F(X[76])+2*sum(F(X[i]),i=2..75))
;
(1.2.2.23)
(1.2.2.23)
O Maple fornece uma aproximação ótima para esta integral:
> Iap2:=evalf(int(F(x),x=0..1));
(1.2.2.24)
Comparando este resultado com o do método do trapézio temos:
> Erro:=Iap-Iap2;
(1.2.2.25)
Ou seja, aproximadamente
<
.
Exercício
1. Calcule a integral
utilizando o método trapezoidal composto com erro menor que
.
Métodos de Simpson-Kepler
O método do trapézio consistia em aproximar a área sob a curva, entre
por um
polinômio interpolante de primeiro grau (reta). A partir de agora vamos generalizar este
procedimento utilizando polinômios de graus superiores.
Método de Simpson 1/3 simples
Aqui aproximamos a função
na Fig. 1 Ou seja,
por um polinômio do segundo grau
,
com
=
.
Fig. 1
, como mostrado
Necessitamos de três pontos que serão interpolados por
ponto médio
. Além de e
escolheremos o
.
Os coeficientes deste polinômio são definidos pelas condições de interpolação:
,
,
Mais explicitamente,
> restart:
> p:=x->a0+a1*x+a2*x^2;
(1.2.3.1)
> EQ:=[p(a)=f(a),p((a+b)/2)=f(m),p(b)=f(b)];
(1.2.3.2)
> sol:=solve(EQ,[a0,a1,a2]);
(1.2.3.3)
O polinômio interpolante é então dado por
> assign(sol):
> p(x);
(1.2.3.4)
A integral correspondente é dada por
> int(p(x),x=a..b);
(1.2.3.5)
> simplify(%);
(1.2.3.6)
(1.2.3.6)
> factor(%);
(1.2.3.7)
Portanto,
=
Como
.
,
=
Método de Simpson 1/3 composto
O método desenvolvido acima pode agora ser aplicado de maneira composta. Na Fig. 2
ilustramos tal aplicação para
.
Fig. 2 (Extraído de Pauls Online Notes)
Temos então três parábolas que interpolam cada tríade
.
e a integral total é a soma das áreas sob cada parábola:
,
com
,
,
.
Portanto,
.
Notemos que os pontos com índices ímpares têm coeficiente 2 e os índices têm coeficiente 4.
De modo geral temos
.
Para implementar esta fórmula no Maple, devemos notar que os pontos da malha têm índices
que começam com índice 1 e não 0. Vamos então reescrever a fórmula acima como
.
Exemplo 3
Resolvamos novamente a integral do Exemplo 1
,
agora utilizando o método de Simpson 1/3. Tomemos 158 intervalos, para fazer uma
comparação deste resultado com o do Exemplo 1.
> restart:
> f:=x->exp(-x^3+x^2);
(1.2.3.8)
> a:=1:n:=158:h:=evalf(1/n):
> x:=[evalf(seq(a+h*i,i=0..n))]:
A integral aproximada é então dada por
> Iap1 :=(1/3)*h*(f(x[1])+4*(sum(f(x[2*j]),j=1..(1/2)*n))+2*
(sum(f(x[2*k+1]),k=1..(1/2)*n-1))+f(x[n+1]));
(1.2.3.9)
O valor dado pelo Maple é:
> Iap2:=evalf(int(f(t),t=1..2));
(1.2.3.10)
O erro é dado por
> Iap1-Iap2;
(1.2.3.11)
Ou seja, o erro diminuiu quadraticamente, relativamente àquele cometido pelo método
trapezoidal, com um número similar de intervalos.
De fato, o erro no método de Simpson 1/3 composto é dado por
.
Exemplo 4
Resolvamos a integral
,
pelo método de Simpson 1/3 composto, com erro de até
> restart:
> f:=exp(-sin(x));
.
(1.2.3.12)
> d4:=diff(f,x$4);
(1.2.3.13)
> plot(d4,x=0..1);
0
1
x
Certamente o maior valor em módulo desta função é 3, em
> m:=evalf(subs(x=1,d4));
.
(1.2.3.14)
Então
> eq:=10^(-5)=1/(180*n^4)*m;
(1.2.3.15)
e o número de intervalos deve ser
> nn:=fsolve(eq,n,0..10);
Portanto, devemos ter ao menos
Definamos
> F:=unapply(f,x);
(1.2.3.16)
( deve ser sempre um número par neste método).
(1.2.3.17)
Com
> a:=0:n:=8:h:=evalf(1/n);
(1.2.3.18)
(1.2.3.18)
> x:=[evalf(seq(a+h*i,i=0..n))];
(1.2.3.19)
a integral aproximada é então dada por
> Iap1 :=(1/3)*h*(F(x[1])+4*(sum(F(x[2*j]),j=1..(1/2)*n))+2*
(sum(F(x[2*k+1]),k=1..(1/2)*n-1))+F(x[n+1]));
(1.2.3.20)
A integral dada pelo Maple é
> Iap2:=evalf(int(F(t),t=0..1));
(1.2.3.21)
O erro é
> Iap2-Iap1;
(1.2.3.22)
que é menor do que o limite superior estabelecido (como esperado).
Método de Simpson-Kepler 3/8 simples
Aqui aproximamos a função
por um polinômio do terceiro grau
pontos entre
e
, como mostrado na Fig. 3.
, que intepola 4
(x1 ,y1 )
(x 2 ,y 2 )
(x ,y )
y = p(x)
x0
(x 3 ,y 3 )
y = f(x)
x1
x2
x3
x
Fig. 3 Regra de Simpson 3/8
Ou seja,
,
com
=
.
Suponhamos que os quatro pontos que serão interpolados por
são igualmente espaçados:
,
Ou seja,
Fazendo
e
interpolação:
,
,
.
, os coeficientes deste polinômio são definidos pelas condições de
,
,
Mais explicitamente,
> restart:
> X:=[a,a+h,a+2*h,a+3*h];
(1.2.3.23)
> Y:=map(f,X);
(1.2.3.24)
Geramos agora o polinômio que interpola estes pontos:
> p:=interp(X,Y,x);
(1.2.3.25)
Integrando no intervalo
temos
> I1:=int(p,x=a..a+3*h);
(1.2.3.26)
Este resultado pode ser consideravelmente simplificado:
> I2:=simplify(I1);
(1.2.3.27)
Portanto,
=
,
com
.
Método de Simpson-Kepler 3/8 composto
Fazendo a composição do método de Simpson-Kepler 3/8 no intervalo
intervalos de comprimento
, com
,
temos
.
O erro tem a seguinte expressão:
,
com
. Este erro é da mesma ordem daquele cometido no método de Simpson 1/3.
Notemos que o número de intervalos agora pode ser ímpar, mas deve ser divisível por 3.
Exemplo 5
Resolvamos a integral
,
pelo método de Simpson 3/8 composto, com erro de até
> restart:
> f:=exp(-sin(x));
.
(1.2.3.28)
> d4:=diff(f,x$4);
(1.2.3.29)
> plot(d4,x=0..1);
0
1
x
Certamente o maior valor em módulo desta função é 3, em
> eq:=10^(-5)=1/(80*n^4)*3;
. Então
(1.2.3.30)
e o número de intervalos deve ser
> nn:=fsolve(eq,n,0..10);
Portanto, devemos ter ao menos
método). Definamos
> F:=unapply(f,x);
(1.2.3.31)
( deve ser sempre um número divisível por 3 neste
(1.2.3.32)
Com
> a:=0:n:=9:m:=n/3;h:=evalf(1/n);
(1.2.3.33)
> x:=[evalf(seq(a+h*i,i=0..n))];
(1.2.3.34)
a integral aproximada é então dada por (lembrando que devemos deslocar o índice de uma
unidade para fazer a implementação):
> Iap1 :=(3/8)*h*(sum(F(x[3*k-2])+3*F(x[3*k-1])+3*F(x[3*k])+
F(x[3*k+1]),k=1..m));
(1.2.3.35)
A integral dada pelo Maple é
> Iap2:=evalf(int(F(t),t=0..1));
(1.2.3.36)
O erro é
> Iap2-Iap1;
(1.2.3.37)
que é menor do que o limite superior estabelecido (como esperado).
Exercícios
1. Use a regra de Simpson 1/3, com
de
a
, para calcular a integral de
. Calcule o erro verdadeiro e o erro estimado.
2. Resolva a integral
(a) Analiticamente
(b) Usando uma única aplicação da regra do trapézio,
(c) Usando múltiplas aplicações da regra do trapézio, com
e
.
(d) Uma única aplicação da regra de Simpson 1/3.
(e) Múltiplas aplicações da regra de Simpson 1/3, com
.
Em cada item estime o erro e compare com o erro exato, comparando com (a).
3. Calcule a integral dos dados tabelados abaixo, usando (a) a regra trapezoidal, (b) a regra de
Simpson 1/3 e (c) o polinômio interpolador dos dados.
4. Calcule as integrais do exercício 1, com
, usando Simpson 1/3 e estime o
erro cometido. Compare com os valores fornecidos pelo sistema.
5. Determine
(i)
,
(ii)
(iii)
com um erro de no máximo 0.001,utilizando:
(a) O método dos trapézios
(b) O método de Simpson 1/3
(c) Utilize o comando de integração numérica do sistema e verifique se o erro real é realmente
menor ou igual ao previsto.
Download

Métodos Computacionais Numéricos e Algébricos com Maple