Diferenciação numérica

Origem: Wikipédia, a enciclopédia livre.
Ir para: navegação, pesquisa

Na análise numérica, diferenciação numérica descreve algoritmos para calcular a derivada de uma função matemática ou uma função de valores de sub-rotina usando a função e talvez outros conhecimentos sobre a função.

Derivative.png

Fórmula das Diferenças Finitas[editar | editar código-fonte]

O método mais simples para aproximar a derivada é usar o método de diferenças finitas.

Uma simples estimação de dois pontos é computar a inclinação de uma reta secantes vizinha através dos pontos (x,f(x)) e (x+h,f(x+h)).1 A inclinação dessa reta é dada por:

f'(x) \simeq {f(x+h)-f(x)\over h}.

Onde h um número suficientemente pequeno que representa uma leve mudança em x, podendo ser tanto positivo quanto negativo. Esta expressão é conhecida como quociente das diferenças de Newton ou fórmula de diferenças finitas (progressivas para h > 0 e regressivas, se h < 0).

A inclinação dessa reta secante difere da inclinação da reta tangente por um valor que é aproximadamente proporcional a h. A inclinação da reta secante tende a inclinação da reta tangente quando h tende a zero. Portanto, a verdadeira derivada de f com relação a x é o limite do valor do quociente das diferenças quando a reta secante se aproxima da reta tangente:

f'(x)=\lim_{h\to 0}{f(x+h)-f(x)\over h}.

Como a imediata substituição de 0 por h resulta numa divisão por zero, calcular a derivada diretamente pode não ser intuitivo.

Analogamente, a inclinação pode ser estimada empregando posições (x - h) e x.

Outra fórmula de dois pontos é computar a inclinação de uma reta secante vizinha através dos pontos (x-h, f(x-h)) e (x+h, f(x+h)). A inclinação dessa reta é:

f'(x) \simeq {f(x+h)-f(x-h)\over 2h}.

Nesse caso, os erros de primeira ordem se cancelam, portanto a inclinação dessa reta secantes difere da inclinação da reta tangente por um valor que é aproximadamente proporcional a h^2. Assim, para pequenos valor de h, esta é uma forma mais precisa de aproximar a reta tangente do que a estimativa unilateral. Contudo note que apesar da inclinação ser computada em x, o valor da função em x não é envolvido.

A estimação do erro é dada por:

R = {{-f^{(3)}(c)}\over {6}}h^2,

onde c é algum ponto entre x-h e x+h. Este erro não inclui o erro de arrendondamento devido aos números serem representados e os cálculos serem executados no limite de precisão.


Exemplos[editar | editar código-fonte]

  • f'(x) =\frac{f(x+h)-f(x)}{h} + \xi_1(x,h)\,
  • f'(x) =\frac{f(x+h)-f(x-h)}{2h} + \xi_2(x,h)\,

Neste caso, as funções \xi_1(x,h)\, e \xi_2(x,h)\, expressam o chamado erro de truncamento. É imediato da definição de derivada de um função real que:

  • \lim_{h\to 0}\xi_1(x,h)=0\quad\hbox{e}\quad \lim_{h\to 0}\xi_2(x,h)\,

Contanto que a função f\, seja diferenciável no ponto x\, e, portanto, espera-se que esses métodos produzam boas aproximações quando h é pequeno.

Erro de truncamento[editar | editar código-fonte]

Para a primeira aproximação, é bastante simples encontrar um cota para o erro \xi_1(x,h)\, supondo f\, uma função de classe C2, usando o teorema de Taylor (sem perda de generalidade, suponhe-se h>0\,):

  • f(x+h) =f(x) + h f'(x) + \frac{h^2}{2}f''(\zeta),~~\zeta\in (x,x+h)\,

logo:

  • \frac{f(x+h) -f(x)}{h} =  f'(x) + \frac{h}{2}f''(\zeta)\,

e, portanto vale a estimativa:

  • \left|\xi(x,h)\right|\leq \frac{h}{2}\max_{x\in [x,x+h]} |f''(x)|\,


Considerações práticas usando aritmética de ponto flutuante[editar | editar código-fonte]

Example showing the difficulty of choosing h due to both rounding error and formula error

Uma importante consideração - na prática - quando a função é aproximada usando aritmética de ponto flutuante é o quão pequeno deve ser o valor de h. Se for escolhido um valor muito pequeno, a subtração vai produzir um grande erro de arrendondamento. Na verdade, todas as fórmulas de diferenças finitas são mal condicionadas2 e devido ao cancelamento catastrófico vai gerar um valor de zero se h é pequeno o suficiente.3 . Porém, se o valor escolhido para h for muito grande, o cálculo da inclinação da reta secante será mais preciso, porém a inclinação da tangente estimada usando a reta secante pode ser pior.

Uma escolha para h que é pequeno o suficiente, sem produzir grandes erros de arrendondameto, é: \sqrt{\varepsilon}x, onde o épsilon de máquina ε é tipicamente da ordem de 2.2×10−16. 4 Esse épsilon é para variáveis de dupla precisão (64-bit): tais cálculos para precisão simples são raramente úteis. O valor resultante provavelmente não será um número "arrendodado" em binário, portanto é importante perceber que apesar de x ser o número representado na máquina, x + h quase certamente não será. Isso significa que x + h será substituído (via arrendondamento e truncamento) por um número possível de ser representado na máquina próximo, com a consequência de que um passo aparentemente redondo, como h = 0.1, não será um número redondo em binário (é uma série recorrente, assim como \frac{1}{3} em decimal), porém pode ser aproximado por:

 h:=sqrt(eps)*x;
 xph:=x + h;
 dx:=xph - x;
 slope:=(F(xph) - F(x))/dx;

Todavia, com computadores, as facilidades de otimização do compilador pode falhar ao atender os detalhes da atual aritmética computacional e, em vez disso, aplicar os axiomas da matemática para deduzir que dx e h são o mesmo. Com C e linguagens similares, a diretiva que xph é uma variável volátil vai prevenir isso.

Erro mínimo[editar | editar código-fonte]

Quando estes esquemas numéricos são implementados em algoritmos com precisão finita, existe uma segunda fonte de erro devido ao arredondamento do algoritmo. Para fins de uma análise simplificada, considera-se que todo o erro de arredondamento se concentra na avaliaçao do valor da função f\, e que sua ordem de grandeza não depende de h\,. Denotando-o por \epsilon, temos:

  • \frac{f(x+h) -f(x)+\epsilon}{h} =  f'(x) + \frac{h}{2}f''(\zeta)\,

ou seja:

  • \frac{f(x+h) -f(x)}{h} =  f'(x) + \frac{h}{2}f''(\zeta)-\frac{\epsilon}{h}\,

Neste caso, o erro total é dado por:

  • \left|\xi_{total}(x,h)\right|\leq \frac{h}{2}\max_{x\in [x,x+h]} |f''(x)|+ \frac{\epsilon}{h}\,

Observe que o termo relativo ao erro de truncamente diminui quando h\, diminui mas o termo relativo ao erro de arredonadamento cresce quando h\, diminui. Esta estimativa é minima quando:

  • h=\sqrt{\frac{2\epsilon}{\max_{x\in [x,x+h]} |f''(x)|}}\,

o que implica o seguinte erro mínimo para o esquema:

  • \sqrt{2\epsilon\max_{x\in [x,x+h]} |f''(x)|}\,

Métodos de maior ordem[editar | editar código-fonte]

Métodos de maior ordem para aproximar a derivada, assim como métodos para o cálculo de maiores derivadas existem.

Abaixo é o métode de cinco pontos para a primeira derivada.5

f'(x) = \frac{-f(x+2 h)+8 f(x+h)-8 f(x-h)+f(x-2h)}{12 h}+\frac{h^4}{30}f^{(5)}(c)

onde c\in[x-2h,x+2h].

Quadratura diferencial[editar | editar código-fonte]

Quadratura diferencial é a aproximação da derivada usando valores ponderados para os valores da função.6 7 O nome é uma analogia a quadratura da Integração numérica onde somas ponderadas são usadas em métodos como o Método de Simpson ou a Regra do Trapézio. Existem vários métodos para determinar os coeficientes de peso. Quadratura diferencial é usada para resolver Equações diferenciais parciais.

Método das variáveis complexas[editar | editar código-fonte]

A clássica aproximação por diferenças finitas para diferenciação numérica é mal condicionada. No entanto, se f é uma função holomorfa, com valor real sobre a linha real, que pode ser avaliada em pontos no plano complexo perto de x, assim tem-se métodos estáveis. Por exemplo,3 a primeira derivada pode ser calculada por uma fórmula com passo complexo:8

f'(x)\approx \Im(f(x + ih))/h.

A fórmula acima só é válida para calcular uma derivada de primeira ordem. A generalização dessa para calcular derivadas de qualquer ordem implica números multicomplexos, resultando em derivadas multicomplexas.9

No geral, derivadas de qualquer ordem podem ser calculadas usando a fórmula integral de Cauchy:

f^{(n)}(a) = {n! \over 2\pi i} \oint_\gamma {f(z) \over (z-a)^{n+1}}\, \mathrm{d}z

onde a integração é feita numericamente

Usar variáveis complexas para diferenciação numérica foi iniciado por Lyness e Moler em 1367.10 Um método baseado na inversão numérica de uma transformada de Laplace complexa foi desenvolvido por Abate e Dubner.11 Um algoritmo que pode ser usado sem requerer conhecimento sobre o método ou as características da função foi desenvolvido por Fornberg.2

Referências[editar | editar código-fonte]

  1. Richard L. Burden, J. Douglas Faires (2000), Numerical Analysis, (7th Ed), Brooks/Cole. ISBN 0-534-38216-9
  2. a b Numerical Differentiation of Analytic Functions, B Fornberg - ACM Transactions on Mathematical Software (TOMS), 1981
  3. a b Using Complex Variables to Estimate Derivatives of Real Functions, W Squire, G Trapp - SIAM REVIEW, 1998
  4. Following Numerical Recipes in C, Chapter 5.7
  5. Abramowitz & Stegun, Table 25.2
  6. Differential Quadrature and Its Application in Engineering: Engineering Applications, Chang Shu, Springer, 2000, ISBN 978-1-85233-209-9
  7. Advanced Differential Quadrature Methods, Yingyan Zhang, CRC Press, 2009, ISBN 978-1-4200-8248-7
  8. (2003) "The Complex-Step Derivative Approximation". ACM Transactions on Mathematical Software 29 (3): 245–262. Predefinição:Citeseerx.
  9. http://russell.ae.utexas.edu/FinalPublications/ConferencePapers/2010Feb_SanDiego_AAS-10-218_mulicomplex.pdf
  10. (1967) "Numerical differentiation of analytic functions". SIAM J.Numer. Anal. 4: 202–210.
  11. (March 1968) "A New Method for Generating Power Series Expansions of Functions". SIAM J. Numer. Anal. 5 (1): 102–112.

Links Externos[editar | editar código-fonte]

Wikilivros
O Wikilivros tem um livro chamado Numerical Methods