| | | |

Matemática numérica III

Ajude a manter o site livre, gratuito e sem propagandas. Colabore!

5.1 Integração autoadaptativa

Vamos considerar o problema de integrar

I⁢(a,b)=∫abf⁢(x)⁢𝑑x (5.1)

pela Regra de Simpson111Consulte mais sobre a Regra de Simpson em Seção 10.1 Regras de Newton-Cotes.. Em um dado subintervalo [α,β]⊂[a,b], temos

I⁢(α,β)=h03⁢[f⁢(α)+4⁢f⁢(α+h0)+f⁢(β)]⏟S⁢(α,β)−h0590⁢f(4)⁢(ξ), (5.2)

onde h0=(β−α)/2 e ξ∈(α,β). Ou seja, temos que

I⁢(α,β)−S⁢(α,β)=−h0590⁢f(4)⁢(ξ). (5.3)

A ideia é explorarmos esta informação de forma a obtermos uma estimativa para o erro de integração no intervalo [α,β] sem necessitar computar f(4).

Aplicando a Regra de Simpson na partição [α,(α+β)/2]∪[(α+β)/2,β], obtemos

I⁢(α,β)−S2⁢(α,β)=−(h0/2)590⁢(f(4)⁢(ξ)+f(4)⁢(η)), (5.4)

onde ξ∈(α,(α+β)/2), η∈(α+β)/2,β) e

S2⁢(α,β)=S⁢(α,(α+β)/2)+S⁢((α+β)/2,β). (5.5)

Agora, vamos assumir que f(4)⁢(ξ)≈f(4)⁢(η) de forma que temos

I⁢(α,β)−S2⁢(α,β)≈−116⁢h0590⁢f(4)⁢(ξ). (5.6)

Subtraindo (5.3) de (5.6), obtemos

h0590⁢f(4)⁢(ξ)≈1615⁢[S⁢(α,β)−S2⁢(α,β)]⏟ℰ⁢(α,β). (5.7)

Isto nos fornece a seguinte estimativa a posteriori do erro

|I⁢(α,β)−S2⁢(α,β)|≈|ℰ⁢(α,β)|15. (5.8)

Na prática, costuma-se utilizar a seguinte estimativa mais restrita

|I⁢(α,β)−S2⁢(α,β)|≈|ℰ⁢(α,β)|10. (5.9)

Para garantir uma precisão global em [a,b] igual a uma dada tolerância, é suficiente impor que

|ℰ⁢(α,β)|10≤ϵ⁢β−αb−a. (5.10)
Código 18: Algoritmo Simpson Autoadaptativo
1def simpson(f,a,b):
2 return (b-a)/6. * (f(a) + 4*f((a+b)/2.) + f(b))
3
4def simad(f,a,b,tol=1e-8,hmin=1e-10):
5 # intervalo calculado
6 S = (a,a)
7 # intervalo a ser calculado
8 N = (a,b)
9 # intervalo ativo
10 A = N
11 # aprox calculada em [a, b]
12 J = 0.
13 # aprox calculada em A
14 JA = 0.
15 # num f eval
16 nfe = 0
17 # info
18 info = 0
19 while (S != (a,b)):
20 print(S,N,A)
21 # tamanho do intervalo
22 h = A[1]-A[0]
23 while (h > hmin):
24 J0 = simpson(f,A[0],A[1])
25 JA = simpson(f,A[0],A[0]+h/2.)
26 JA += simpson(f,A[0]+h/2.,A[1])
27 nfe += 9
28 # est erro
29 est = np.fabs(J0-JA)/10.
30 # criterio de parada
31 if (est < tol*h/(b-a)):
32 break
33 else:
34 A = (A[0],A[0]+h/2.)
35 h = h/2.
36 print("\t",S,N,A,h,est)
37 if (h < hmin):
38 print("Atencao! h < hmin !")
39 info = -1
40 break
41 J += JA
42 S = (a, A[1])
43 N = (A[1], b)
44 A = N
45 return J, nfe, info
Exemplo 5.1.1.
∫−34arctg⁡(10⁢x)⁢𝑑x=−3⁢arctg⁡(30)−ln⁡(1601)20+ln⁡(901)20+4⁢arctg⁡(40) (5.11)
≈1.54203622. (5.12)

5.1.1 Exercícios

E. 5.1.1.

Implemente uma abordagem autoadaptativa usando a Regra do Trapézio. Valide-a e compare com o exemplo anterior.


Envie seu comentário

Aproveito para agradecer a todas/os que de forma assídua ou esporádica contribuem enviando correções, sugestões e críticas!

Opcional. Preencha seu nome para que eu possa lhe contatar.
Opcional. Preencha seu e-mail para que eu possa lhe contatar.
As informações preenchidas são enviadas por e-mail para o desenvolvedor do site e tratadas de forma privada. Consulte a política de uso de dados para mais informações.

Licença Creative Commons
Este texto é disponibilizado nos termos da Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional. Ícones e elementos gráficos podem estar sujeitos a condições adicionais.

Pedro H A Konzen
| | | |