Ordens de Erro e Quadratura Adaptativa
Objetivos de Aprendizagem
- Definir a ordem de uma regra de quadratura como afirmação assintótica e estimá-la mesmo sem a integral exata.
- Usar a expansão de Euler-Maclaurin para explicar as potências pares no erro do trapézio e seu comportamento em integrandos periódicos.
- Aplicar a extrapolação de Richardson, deduzir dela a regra de Simpson e montar uma tabela de Romberg.
- Mostrar o que a extrapolação faz quando a potência de assumida está errada, e corrigir isso.
- Transformar duas estimativas de Simpson numa estimativa de erro e num algoritmo adaptativo que gasta avaliações onde está o erro.
- Comparar uma rotina adaptativa com
scipy.integrate.quadpor avaliações e erro atingido, e citar entradas que derrotam as duas.
Contexto e Motivação
Em trapezoid-and-simpson-rules, escolher exigia uma cota para ou no intervalo inteiro, e um único valia em toda parte. Nenhuma das duas coisas combina com o uso real. Uma biblioteca recebe só uma função e uma tolerância, e um integrando como um pico estreito precisa de painéis finos num lugar e grossos no resto.
Os dois problemas têm a mesma resposta: comparar a regra com ela mesma em duas resoluções. A diferença entre elas estima o erro, sem derivada nenhuma. Ela pode melhorar o resultado (extrapolação de Richardson) ou decidir onde refinar (quadratura adaptativa).
Teoria Central
Ordem, medida
Um método para tem ordem num integrando se com quando . Há três coisas embutidas aí: a afirmação é sobre o limite , depende de e não diz nada sobre um específico. Para uma regra composta de grau de precisão em , cada painel contribui com e há painéis, então o erro é : para o trapézio, para Simpson. A ordem é exatamente quando a constante principal não é zero. Ela pode ser maior para uma específica, como mostra a próxima seção.
Com o valor exato, . Sem ele, três resoluções bastam, pois
Para a regra do trapézio em sobre , com . Em , vale , , partindo de , , , a caminho de . A integral exata não foi usada.
A expansão de Euler-Maclaurin
Se , a regra composta do trapézio satisfaz
Só aparecem potências pares, e só entram derivadas nos extremos. Em com : o primeiro termo é , dois termos dão e a diferença verdadeira é . A série é assintótica: para fixo ela não precisa convergir quando se acrescentam termos.
Duas consequências saem de imediato.
- Se , o termo em some. Para em , é em e em , ordem medida de , de acordo com o termo seguinte .
- Se é e periódica de período , todo colchete se anula, então o erro vence qualquer potência de . Isso explica a tabela de da lição anterior.
Extrapolação de Richardson
Suponha com e conhecido. Eliminar de e dá
Nenhuma avaliação nova é necessária. Na regra do trapézio, , , e a combinação é exatamente a regra de Simpson: . Logo Simpson pode ser lida como a regra do trapézio sem o erro principal.
A expansão só tem potências pares, então isso pode ser repetido. A integração de Romberg preenche uma tabela com e
Da extrapolação à estimativa de erro
Num painel com ponto médio , seja um painel de Simpson e a soma de dois meios painéis. Se é quase constante em , então , e assim
A aproximação depende dessa condição. Onde varia muito, ou não existe, o fator 15 está errado. Somar a correção, , dá a regra de Boole nos cinco pontos, exata para polinômios de grau 5.
Simpson adaptativa
O algoritmo: estime o erro num painel; se estiver dentro da tolerância, aceite; caso contrário, divida em dois, dê a cada metade metade da tolerância e aplique a recursão. Os valores da função são passados adiante, então cada divisão custa só duas avaliações novas, e painéis aceitos custam avaliações.
plaintextdef adaptive_simpson(f, a, b, tol): def simp(a, fa, fm, b, fb): return (b - a) / 6 * (fa + 4 * fm + fb) def rec(a, fa, m, fm, b, fb, whole, tol, depth): l, r = (a + m) / 2, (m + b) / 2 fl, fr = f(l), f(r) left, right = simp(a, fa, fl, m, fm), simp(m, fm, fr, b, fb) d = left + right - whole if abs(d) <= 15 * tol or depth == 0: return left + right + d / 15 return (rec(a, fa, l, fl, m, fm, left, tol / 2, depth - 1) + rec(m, fm, r, fr, b, fb, right, tol / 2, depth - 1)) m = (a + b) / 2 fa, fm, fb = f(a), f(m), f(b) return rec(a, fa, m, fm, b, fb, simp(a, fa, fm, b, fb), tol, 60)
O que scipy.integrate.quad faz de diferente
quad chama o QUADPACK. Para um intervalo finito sem pesos nem pontos de quebra, a rotina é qagse, que a documentação do SciPy descreve como subdivisão globalmente adaptativa com extrapolação e uma regra de Gauss-Kronrod de 21 pontos em cada subintervalo. "Globalmente adaptativa" significa que ela mantém uma lista de painéis e refina o que tem a maior estimativa de erro, em vez de dividir a tolerância de antemão como a recursão acima. Os padrões são epsabs=1.49e-8, epsrel=1.49e-8, limit=50. Uma regra de Gauss-Kronrod só avalia pontos interiores, então um integrando que explode num extremo não é, por si só, um problema para ela.
Exemplos Resolvidos
Exemplo 1: Richardson à mão
Em sobre : e , com erros e . Então
com erro , que é a menos de arredondamento. Nove avaliações já tinham sido gastas em , então o ganho de cerca de 1000 vezes não custou nada.
Para o estimador de erro no painel único : , , logo , perto do valor verdadeiro .
Exemplo 2: uma tabela de Romberg
Erros em sobre , cada coluna um nível de extrapolação adiante:
textpainéis aval. ordem 2 ordem 4 ordem 6 ordem 8 ordem 10 1 2 1.41e-01 2 3 3.56e-02 5.79e-04 4 5 8.94e-03 3.70e-05 8.59e-07 8 9 2.24e-03 2.33e-06 1.38e-08 3.35e-10 16 17 5.59e-04 1.46e-07 2.16e-10 1.34e-12 3.31e-14 32 33 1.40e-04 9.10e-09 3.38e-12 4.88e-15 2.22e-16
Com 33 avaliações a tabela chegou ao arredondamento, então o sob a ordem 10 é ruído: em aritmética de 60 dígitos essa entrada tem erro , e a seguinte na diagonal, não impressa, tem . scipy.integrate.romb nas mesmas 33 amostras também termina em .
Exemplo 3: extrapolando com a potência errada
Em a expansão do trapézio não tem potências pares. Ela é com , uma forma generalizada de Euler-Maclaurin para singularidade num extremo. Em esses dois termos dão , de acordo com a diferença calculada até dez dígitos. Richardson com o de livro só muda a constante. Com o medido, o termo principal vai embora:
textn erro T erro p=2 ordem erro p=3/2 ordem 256 5.012e-05 1.982e-05 4.074e-07 512 1.779e-05 7.008e-06 1.50 1.018e-07 2.00 1024 6.304e-06 2.478e-06 1.50 2.546e-08 2.00 2048 2.233e-06 8.759e-07 1.50 6.365e-09 2.00 4096 7.905e-07 3.097e-07 1.50 1.591e-09 2.00
Romberg, que assume potências pares, herda o problema: com 1025 avaliações a última entrada da diagonal tem erro , contra com 33 avaliações em . Meça primeiro, depois extrapole.
Exemplo 4: Simpson adaptativa contra quad
Tolerância para ambas, com epsabs=1e-6, epsrel=0, limit=500, contando chamadas com um wrapper (a contagem é igual a infodict['neval'] de quad). A última coluna vem de uma varredura linear pelos pares: é o primeiro , mais 1, em que Simpson uniforme alcança o erro da adaptativa.
textintegrando em [0,1] Simpson adaptativa quad Simpson uniforme aval. erro aval. erro aval. e^x 17 2.2e-10 21 2.2e-16 83 sqrt(x) 105 2.0e-08 231 2.2e-16 25849 1/(1e-6 + (x-0.3)^2) 5009 1.7e-09 567 2.7e-12 8493 |x - 1/sqrt(2)| 37 4.0e-08 357 4.8e-10 413 degrau em 1/sqrt(2) 217 1.1e-16 735 6.5e-08 (veja abaixo)
Leia as colunas com cuidado, porque os erros são diferentes. Avaliações, sozinhas, não ordenam os métodos. A coluna uniforme também é um primeiro acerto, não um limiar estável, no pico e na quina: o erro não é monótono em , e pares maiores ainda erram a meta, até no pico e na quina.
- Suave:
quadchega ao arredondamento em 21 avaliações. Simpson adaptativa para em 17 com erro bem maior e precisa de 129 avaliações (tolerância ) para chegar a . A regra de grau mais alto vence. - Pico: no pico de meia-largura , Simpson adaptativa precisa de 5009 avaliações contra 8493 da uniforme. Ser adaptativa não é vitória automática: com são 1413 contra 779 da uniforme, e com são 16433 contra 89463. O ganho cresce com a concentração da dificuldade. Em , 234 dos 353 painéis aceitos ficam em , um décimo do intervalo.
- Singular: em os painéis encolhem na direção de (o painel aceito mais estreito tem largura ) e a ordem em avaliações é recuperada: ajustando sobre tolerâncias de a , o erro cai como , contra de Simpson uniforme. A taxa passa de 4 porque a rotina devolve o valor extrapolado.
- Degrau: a recursão custa 217 avaliações em toda tolerância testada. Num painel que contém o salto, e a tolerância caem pela metade a cada divisão, então o teste só passa quando o painel tem cerca de de largura e o arredondamento zera . Simpson uniforme é errática aqui, com erro perto de em 65537 avaliações.
quadinformada do local, compoints=[c], precisa de 42 avaliações e tem erro 0.
Exemplo 5: o que derrota um método adaptativo
Todo método que amostra uma quantidade finita de pontos pode ser enganado, porque uma função pode diferir de só entre as amostras. Cada um destes casos foi executado:
- Um pico entre as amostras. Tome em com , cuja integral é . Simpson adaptativa vê cinco valores perto de zero e devolve depois de 5 avaliações.
quaddevolve com estimativa de erro depois de 21, sem aviso.points=[1/pi]resolve esse caso, mas para ainda devolve cerca de . Conhecendo a escala, divida o intervalo à mão em volta do pico. - Uma estimativa pequena demais. Simpson adaptativa em com tolerância usa 9 avaliações e tem erro , mais de três vezes a tolerância. O fator 15 supunha quase constante.
- Um erro reportado que está errado. No degrau em com
epsabs=1e-10, epsrel=0, limit=500,quaddevolve um erro de , reporta e não emite aviso. O erro fica acima da tolerância, e o valor reportado é mais de cinco ordens de grandeza menor que o real. - Uma integral que não existe. diverge.
quaddevolve (que é , o valor principal) com estimativa de erro e emiteIntegrationWarning: "The integral is probably divergent, or slowly convergent." A documentação diz: "For valid results, the integral must converge; behavior for divergent integrals is not guaranteed." - Explosão num extremo. Para , a rotina acima falha com
ZeroDivisionErrorem .quadfunciona com 231 avaliações e erro , porque nunca avalia . A substituição dá , que é suave, equadpassa a precisar de 21 avaliações.
Livro vs hoje: tutoriais antigos usam scipy.integrate.romberg e scipy.integrate.quadrature, que não existem no SciPy atual. Use quad para uma função e romb para amostras igualmente espaçadas.
Equívocos Comuns e Armadilhas
- "A ordem me dá o erro no meu ." Ela descreve o limite, sob hipóteses. Meça com .
- "Richardson sempre aumenta a precisão." Só com a potência certa e suave o bastante. Com em a ordem continua .
- "A tolerância é uma garantia." No Exemplo 5 o erro chega a três vezes a tolerância. Ela é uma meta que uma estimativa tenta cumprir.
- "O erro reportado por
quadé uma cota superior." No Exemplo 5 ele fica mais de cinco ordens de grandeza abaixo do real. - "Adaptativa sempre sai mais barata que uniforme." Não num pico suave: 1413 contra 779 avaliações.
- "Sem aviso, o resultado está certo." O pico devolveu sem aviso. Se o integrando tem características conhecidas, passe-as em
pointsou divida o intervalo. - Comparar rotinas por avaliações na mesma tolerância. Compare no mesmo erro atingido, pois as rotinas superam uma tolerância por margens muito diferentes.
Resumo
Ordem é uma afirmação assintótica, mensurável sem a resposta exata pela razão . A expansão de Euler-Maclaurin mostra que o erro do trapézio é uma série em potências pares comandada pelas derivadas nos extremos, o que explica a ordem 4 quando e a convergência muito rápida em integrandos suaves e periódicos. A extrapolação de Richardson remove uma potência conhecida: aplicada à regra do trapézio dá Simpson, e repetida dá Romberg. Ela exige a potência certa, como mostra. Comparar um painel de Simpson com dois dá uma estimativa de erro, e refinar onde ela é grande dá a quadratura adaptativa, que ajuda mais quando a dificuldade está concentrada. quad acrescenta uma regra de grau bem mais alto e refinamento global, e vence em integrandos suaves. Nenhuma das duas enxerga entre as amostras, então tolerâncias e estimativas não são garantias.