Teoria de fundo útil
Um pequeno fato que você pode usar para ajudar a entender se uma derivada numérica é corretamente calculada ou não é o restante de Cauchy da expansão de Taylor. Isso é,
ξ∈[x,x+H]f( x + h ) = f( x ) + h f′( x ) + h22f′ ′( ξ)ξ∈ [ x , x + h ]
Isso é útil, porque você provavelmente aproximou sua primeira derivada
f′( x ) ≈ f( x + h ) - f( x - h )2 h
com algum pequeno (normalmente uso , mas tenho certeza de que algum dia encontrarei um caso em que isso não é apropriado).10 - 4h10- 4
Após um pouco de álgebra, podemos usar o restante de Cauchy para ver que nossa aproximação numérica teoricamente deve estar dentro de de .f ' ( x )h f′ ′( ξ) , ξ∈ [ x - h , x + h ]f′( X )
Na verdade, é possível lo por , onde e ... o que é equivalente a , .ξ 1 ∈ [ x - h , X ] ξ 2 ∈ [ x , x + H ] h 2 f ‴ ( ξ ) ξ ∈ [ x - h , x + h ]h ( f′ ′( ξ1) - f′ ′( ξ2) ))ξ1∈ [ x - h , x ]ξ2∈ [ x , x + h ]h2f′ ′ ′( ξ)ξ∈ [ x - h , x + h ]
Problemas na Prática
Ok, temos uma teoria legal delimitando o erro da derivada numérica. Mas existem dois buracos na tentativa direta de usar esses resultados:
1.) Não sabemos (e provavelmente não queremos gastar o tempo aproximando-o)f′ ′ ′( X )
2.) como , sofre instabilidade numéricaf ( x + h ) - f ( x - h )h → 0f( x + h ) - f( x - h )2 h
Então, usando o que sabemos de mais cedo o caminho que eu verificar meus derivados analíticas (que pode não ser a melhor maneira) é que eu escrever a função derivada numérica em função da . Se não souber se a diferença entre as derivadas numéricas e analíticas se deve a um erro de codificação ou apenas à aproximação numérica, posso reduzir e ver se minha derivada numérica se aproxima da derivada analítica antes de sofrer instabilidade numérica (quando isso acontece, suas aproximações numéricas se tornarão menos consistentes à medida que ficar menor). Observe que o termo deve estar desaparecendo quadraticamente, portanto, se o erro for de comh h f ‴ ( ξ ) 0,01 h = 10 - 4 0,0001 h = 10 - 5hhhf′ ′ ′( ξ)0,01h = 10- 4 , deve estar em torno de com assumindo que a instabilidade numérica ainda não foi ativada .0,0001h = 10- 5
Infelizmente, não há diretrizes rígidas e rápidas para sempre determinar essas coisas; depende muito de quão estável é a função (e eu quero dizer, tanto em termos de estabilidade numérica quanto de derivadas mais altas). Mas nas minhas experiências, nunca vi um caso em que o erro de não estivesse definitivamente indo para 0 (ou seja, usar deu praticamente a mesma resposta que ) no momento em que a instabilidade numérica de entrou em ação.h = 10 - 4 h = 10 - 5 h → 0h2f′ ′ ′( ξ)h = 10- 4h = 10- 5h → 0