4.2 Derivação Numérica — Extrapolação de Richardson
1. Introdução
No post anterior, mostramos que as estimativas das derivadas podem ser melhoradas ao diminuir o passo ou ao usar mais pontos através de sucessivas substituições na fórmula de Taylor. Além disso, na seção de implementação, comentamos que a escolha de pode acarretar em problemas, uma vez que o computador possui precisão limita. Uma abordagem para se melhorar a estimativa da derivada consiste na utilização da extrapolação de Richardson.
No caso geral da extrapolação de Richardson, temos um procedimento para aproximar um funcional de uma dada função por uma sequência, dependente do tamanho de , em que, como , o erro possui a seguinte forma assintótica
onde , os são constantes que podem depender da função mas não dependem de . Tais constantes nos são desconhecidas, mas assumimos conhecer . Se a computação é gerada para dois valores distintos de , e , tal que , então há duas aproximações distintas e , que se relacionam com o valor verdadeiro de pela fórmula
para . Multiplicando essa equação para quando por e por por , e subtraindo, temos que é dado por
Escolhendo-se , , na equação acima, temos
Se desejarmos eliminar p termo com nessa equação, devemos computar com e computar de forma simular para, então, calcular a partir de e .
Formalmente, denotamos por e geramos um vetor triangular de aproximantes pela fórmula
onde o elemento corresponde a .
Em alguns casos, um crescimento geométrico de pelo fator não é desejável ou possível, e nós estamos interessados em uma sequência geral . Neste caso, podemos gerar uma tabela por um simples algoritmo apenas se tem uma estrutura especial, . Para o caso usual , temos que
2. Extrapolação de Richardson
A derivada numérica de uma função pode ser descrita como função do passo das fórmulas apresentadas no post anterior na forma
em que é o valor exato da derivada (analítica), é o resíduo que aparece do truncamento da série de Taylor e é a derivada aproximada. Se fizermos duas estimativas independentes usando passos distintos, e , teremos que
e
portanto
Supondo que as fórmulas usadas na diferenciação numérica sejam aquelas com erros , temos que
logo, a razão entre os dois erros será
Com isso, temos a seguinte relação entre os erros
que podemos substituir na equação da igualdade das derivadas numéricas
isolando o erro, temos
Com isso, podemos obter a estimativa para o erro de truncamento em termos da relação dos tamanhos dos passos. Essa estimativa pode ser substituída em
o que permite fornecer uma estimativa melhorada da derivada
3. Implementação
def richard_extrapolation(diff, f, x, h1=0.1, h2=0.05):
"""
Increase the accuracy of numerical derivative (diff).
diff_f_xi = richard_extrapolation(diff, f, x, h1=0.001, h2=0.0005)
INPUT:
* diff: the numerical differentiation function (diff1, diff2, ...)
* f: function to derivate
* x: evaluation point
* h: step size
return: f^(i)(X=x)
Author: Pedro Garcia [sawp@sawp.com.br]
see: http://www.sawp.com.br
License: Creative Commons
http://creativecommons.org/licenses/by-nc-nd/2.5/br/
Jun 2012
"""
Dh2 = diff(f, x, h2)
Dh1 = diff(f, x, h1)
extrapolation = Dh2 + (1.0 / ((h1 / h2) ** 2) - 1.0) * (Dh2 - Dh1)
return extrapolation
Um exemplo de utilização dessa função pode ser obtido em http://www.sawp.com.br/code/derivatives/derivative_richard_extrapolation.py .
4. Copyright
Este documento é disponível sob a licença Creative Commons. As regras dos direitos de cópia deste conteúdo estão acessíveis em http://creativecommons.org/licenses/by-nc-nd/2.5/br/.