Derivada Numérica: mudanças entre as edições

De Física Computacional
Ir para navegação Ir para pesquisar
Ejagnes (discussão | contribs)
Sem resumo de edição
Ejagnes (discussão | contribs)
Sem resumo de edição
Linha 39: Linha 39:
Comparando a expressão acima com o método de de derivada à direita , Eq. 2,  notamos que a diferença existe a partir do termo <math>\Delta x</math>. Podemos dizer que o erro ao usar a quociente de Newton para calcular a derivada é proporcional à <math>\Delta x</math>. Assim, vemos que o erro cresce ''linearmente'' com <math>\Delta x</math> e portanto devemos usar valores pequenos do incremento.
Comparando a expressão acima com o método de de derivada à direita , Eq. 2,  notamos que a diferença existe a partir do termo <math>\Delta x</math>. Podemos dizer que o erro ao usar a quociente de Newton para calcular a derivada é proporcional à <math>\Delta x</math>. Assim, vemos que o erro cresce ''linearmente'' com <math>\Delta x</math> e portanto devemos usar valores pequenos do incremento.


Resumindo, por um lado temos o '''erro de truncamento''' e pelo outro o de '''arredondamento''', onde o valor ótimo será uma solução de compromisso entre os dois tipos de erro. Vemos então que deve haver um ''intervalo de valores'' dentro do qual o  <math>\Delta x</math> deve variar para que a derivada numérica seja a mais próxima do valor real possível. Na Fig.(XXXX), mostramos um exemplo.
Resumindo, por um lado temos o '''erro de truncamento''' e pelo outro o de '''arredondamento''', onde o valor ótimo será uma solução de compromisso entre os dois tipos de erro. Vemos então que deve haver um ''intervalo de valores'' dentro do qual o  <math>\Delta x</math> deve variar para que a derivada numérica seja a mais próxima do valor real possível. Nas figuras 5 e 6 mostramos um exemplo.


== Derivada Centrada ==
== Derivada Centrada ==

Edição das 15h29min de 5 de outubro de 2011

A derivada de uma função f(x) é definida como um processo de limite, o qual é matematicamente descrito por:

f(x)=limΔx0f(x+Δx)f(x)Δx (Eq. 1)

Numericamente é impossível tomarmos o limite Δx0; temos necessariamente que trabalhar com um valor de Δx finito. Portanto, a todo cálculo numérico de uma derivada será associado um erro numérico. Abaixo veremos dois métodos numéricos para calcular derivadas e estimaremos os erros associados a tais métodos.

Derivada à direita

Este método se baseia na definição formal de derivada. Para um dado valor de incremento Δx, podemos estimar a derivada da função:

f(x)f(x+Δx)f(x)Δx (Eq. 2)

A expressão a direita é chamada de quociente diferencial de Newton. Existem duas fontes de erro nessa expressão, o erro de arredondamento e o erro de truncamento. O primeiro é um erro associado à precisão numérica dos computadores, que é finita (o número de casas dos números). Comparando a expressão (2) com a (1), notamos que, quanto menor o valor de Δx, o valor estimado numericamente é mais próximo ao valor real. No entanto, numericamente não podemos tomar Δx tão pequeno quanto se queira, porque há um limite de precisão numérica. Assim, na região do Δx pequeno há o tipo de erro chamado de erro de arredondamento.

Por exemplo, se o nosso computador hipotético processar uma operação matemática com 4 casas decimais, temos que, para a função f(x)=x2, f(0,1)=0,01 e f(0,1001)=0,01002001. Note que, usando a precisão de nosso computador, f(x)=f(x+Δx) no caso em que x=0,01 e Δx=0,001. Com isso, o resultado da derivada numérica seria f(0,1)=0, o que sabemos não ser verdade, já que podemos calcular essa derivada analiticamente. Isso coloca um limite inferior para o incremento Δx, e assim para a precisão da estimativa numérica da derivada.

O segundo tipo de erro podemos dizer que é "intrínseco" ao método numérico. Para estimá-lo, faremos uso da expansão em série de Taylor da função :f(x)

f(x+Δx)=f(x)+f(x)Δx+12f(x)(Δx)2+16f(x)(Δx)3+... (Eq. 3)

manipulando os termos acima, temos:

f(x+Δx)f(x)Δx=f+12fΔx+...,

e assim

f=f(x+Δx)f(x)ΔxQuocientedeNewton12fΔx+....

Comparando a expressão acima com o método de de derivada à direita , Eq. 2, notamos que a diferença existe a partir do termo Δx. Podemos dizer que o erro ao usar a quociente de Newton para calcular a derivada é proporcional à Δx. Assim, vemos que o erro cresce linearmente com Δx e portanto devemos usar valores pequenos do incremento.

Resumindo, por um lado temos o erro de truncamento e pelo outro o de arredondamento, onde o valor ótimo será uma solução de compromisso entre os dois tipos de erro. Vemos então que deve haver um intervalo de valores dentro do qual o Δx deve variar para que a derivada numérica seja a mais próxima do valor real possível. Nas figuras 5 e 6 mostramos um exemplo.

Derivada Centrada

Outro cálculo numérico da derivada pode ser feito baseado na declividade de dois pontos próximos, um antes e outro depois do ponto onde queremos avaliar a derivada.

A declividade da linha definida por esses dois pontos é:

f(x)f(x+Δx)f(xΔx)2Δx (Eq. 4)

que é chamada de derivada centrada.

Podemos mostrar que o erro intrínseco a este método é menor do que o erro associado ao método anterior. Para estimar o erro de truncamento, expandimos f(x) em torno de Δx ( feito na Eq(3)) e em torno de Δx:

f(xΔx)=f(x)+f(x)(Δx)+12f(x)(Δx)216f(x)(Δx)3+...

Somando f(x+Δx) dada pela Eq.(3) e os termos de f(xΔx) da expressao acima, notamos que os termos lineares em Δx se cancelam. Isolando f(x), temos:

f(x)=f(x+Δx)f(xΔx)2Δx26f(x)(Δx)2+...

Comparando a expressão acima com a definição do método de derivada centrada, Eq. 4, notamos que o erro de truncamento é da ordem de (Δx)2. Para |Δx|<1, vemos que o erro de truncamento associado ao método de derivada centrada é menor do que o erro para a derivada à direita.

Medida numérica do Erro associado a cada método

Para ter uma estimativa do erro associado a utilização da derivada numérica, podemos comparar valores utilizando uma função que tem sua derivada conhecida analiticamente. Assim, o erro é dado por

erro=|f'AN(x)f'NUM(x)||f'NUM(x)|,

onde f'AN(x) e f'NUM(x) são as derivada analítica e numérica de f(x), respectivamente.

Note que, multiplicando o erro por 100, temos a porcentagem de erro que acompanha a derivada numérica.

Programa

Implementar a derivada numérica em FORTRAN é apenas uma linha de código:

...
Df = (f(x+h) - f(x))/h
...

Onde f(x) deve ser definida num bloco FUNCTION F(x) ... END FUNCTION F.

O resto depende de onde e para que queremos calcular a derivada.

Exemplo

Como demonstração, usaremos a função f(x) dada por

f(x)=sin(x2)ex/3x2+4.

Os gráficos abaixo ilustram os métodos de derivada à direita e derivada centrada, ambos com x=0,6 e Δx=0,4.

Primeiramente, a derivada à direita, onde a curva em vermelho representa f(x) e a curva em azul representa a derivada de f(x).

Figura 1

Aqui temos um zoom no ponto x com a curva da derivada calculada pelo método descrito acima. Em azul a derivada calculada numericamente, só que agora com um deslocamento em y para passar pelo ponto (f(x),x).

Figura 2

O exemplo do método de derivada centrada está a seguir. Em vermelho a curva f(x) e em azul a sua derivada.

Figura 3

A próxima figura mostra um zoom com a curva da derivada em x.

Figura 4

Além da ilustração dos métodos de derivação numérica, abaixo temos o gráfico do valor retornado pelo método da derivação à direita em função do incremento Δx utilizado.

Figura 5
Figura 6

A esquerda, a derivada em x=3 numérica em função do Δx utilizado. O valor exato da derivada em é f(3)=4.08963. Diminuindo o valor do incremento, vemos que em volta de Δx=0.01 começa a convergir, piorando a partir de Δx=106. Para valores muito pequenos temos o erro de arredondamento e para valores muito alto temos o erro de truncamento.

Na figura a direita vemos ampliada a região de convergência, onde o valor de Δx=8x105 parece ser o ótimo.

NOTA: os programa FORTRAN usado para o calculo da derivada esta em Real (ou Real*4, ou seja ponto flutuante em representação de 32 bits). Como seria em dupla precisão (Real*8)?

Links Externos