Derivada Numérica

De Física Computacional
Ir para: navegação, pesquisa

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

(Eq. 1)

Numericamente é impossível tomarmos o limite ; temos necessariamente que trabalhar com um valor de 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 , definimos a derivada numérica (a direita) como:

(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 , o valor estimado numericamente é mais próximo ao valor real. No entanto, numericamente não podemos tomar tão pequeno quanto se queira, porque há um limite de precisão numérica. Assim, na região do 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 , e . Note que, usando a precisão de nosso computador, no caso em que e . Com isso, o resultado da derivada numérica seria , o que sabemos não ser verdade, já que podemos calcular essa derivada analiticamente. Isso coloca um limite inferior para o incremento , 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 :

(Eq. 3)

manipulando os termos acima, temos:

e assim

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 . Podemos dizer que o erro ao usar a quociente de Newton para calcular a derivada é proporcional à . Assim, vemos que o erro cresce linearmente com 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 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 à esquerda

A derivada numérica pode também ser calculada com um incremento a esquerda do (e também centrado no como veremos depois). Em cálculo as três devem coincidir para existir a derivada em . Existem funções que podem ser contínuas em um ponto, porém ter derivada diferente a esquerda e direita, por tanto nesses casos a derivada no ponto não está definida. O exemplo mais simples é , continua e com derivada em todo . Nesse ponto as derivadas a esquerda e direita são diferentes.

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 é:

(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 em torno de ( feito na Eq(3)) e em torno de :

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

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 . Para , 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

onde e são as derivada analítica e numérica de , 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 dada por

Os gráficos abaixo ilustram os métodos de derivada à direita (figuras 1 e 2) e derivada centrada (figuras 3 e 4), ambos com e .

Primeiramente, a figura 1 mostra a derivada à direita, onde a curva em vermelho representa e a curva em azul representa a derivada de .

Figura 1 - Derivada à direita

A figura 2 mostra um zoom no ponto com a curva da derivada calculada pelo método descrito acima. Em azul a derivada calculada numericamente, só que agora com um deslocamento em para passar pelo ponto .

Figura 2 - Derivada à direita (zoom)

O exemplo do método de derivada centrada está representado na figura 3. Em vermelho a curva e em azul a sua derivada.

Figura 3 - Derivada centrada

A figura 4 mostra um zoom com a curva da derivada centrada em .

Figura 4 - Derivada centrada (zoom)

Além da ilustração dos métodos de derivação numérica, as figuras 5 e 6 mostram o gráfico do valor retornado pelo método da derivação à direita em função do incremento utilizado.

Figura 5 - Erros de truncamento e precisão
Figura 6 - Erros de truncamento e precisão (zoom)

Na figura 5, a derivada numérica em x=3 em função do utilizado. O valor exato da derivada é . Diminuindo o valor do incremento, vemos que em volta de a derivada começa a convergir, piorando a partir de . Para valores muito pequenos temos o erro de arredondamento e para valores muito alto temos o erro de truncamento.

Na figura 6 vemos ampliada a região de convergência, onde o valor de 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