Os limites na qualidade de aproximações numéricas para derivadas
Vamos lá?
Em aulas anteriores vimos exemplos simples do que pode acontecer de inesperado quando fazemos contas em precisão finita. Nesta aula veremos uma situação mais interessante e menos óbvia, ligada às fórmulas de diferenças finitas.
1
2
3
Se é a aproximação de diferenças centradas para a derivada de em , podemos dizer que...
A. converge para , quando o passo de discretização vai a zero.
B. Mesmo que seja arbitrariamente reduzido, não tende a zero.
C. Para fixo, o erro de aproximação é proporcional a
Sobre o experimento numérico apresentado no vídeo, podemos dizer que...
A. ele corrobora o resultado teórico, mas até certo ponto apenas.
B. ele não parte das mesmas premissas da demostração feita no vídeo.
C. ele evidencia que há outros fenônemos não compreendidos ainda.
D. ele não é válido, da forma como foi feito.
Sobre o aumento do erro de aproximação observado no experimento numérico, podemos dizer que...
A. foi gerado por erros significativos no cálculo da função seno.
B. poderia ter sido atenuado se a função seno fosse melhor calculada.
C. era justificado, quando considerando contas em precisão finita.
Este exemplo é bem instrutivo pois mostra como podemos nos enganar ao tentar reproduzir numericamente um resultado teórico.
Do ponto de vista teórico, é verdade que a diferenças centradas, dada por realmente é uma aproximação de segunda ordem para , quando tende a zero, isto é, sempre que , para algum e supondo que tem pelo menos até terceira derivada contínua. Portanto, é correto dizer que a aproximação de diferenças centradas converge para , quando tende a zero.
Este resultado coloca até mesmo a pergunta se precisamos conhecer de fato a derivada de uma função. Não seria suficiente avaliar a função duas vezes e usar a fórmula de diferença centrada para computar o valor da derivada? Se quisermos um valor muito preciso, bastaria tomar muito pequeno.
Mesmo confiando no resultado acima, nossa tarefa como cientistas é desconfiar sempre. Nada mais justo que um experimento numérico para aumentar nossa segurança, não?
O experimento foi montado assim. Consideramos a função , para simplificar o cálculo de . No caso da função seno, . Escolhemos também um valor específico para que não fosse nenhum ângulo notável particular. Depois fomos reduzindo gradativamente o valor do passo de discretização usado no cálculo da diferença centrada e avaliando o erro no valor numérico da derivada, contra o valor exato da derivada, que sabemos ser . O valores para foram tomados como . Os resultados para este experimento foram produzidos com o bloco de código abaixo.
f = @(x) sin(x);g = @(x) cos(x); # derivada de fdc = @(x,h) (f(x+h)-f(x-h))/(2*h); # diferença centradax = pi/3.2; # valor escolhido para xfor n = 0:14; # loop para vários valores para h h = 10^(-n); erro(n,1) = abs( g(x) - dc(x,h) );endforformat short eerro
erro =
8.8074e-02
9.2549e-04
9.2595e-06
9.2595e-08
9.2653e-10
1.2262e-11
2.1045e-11
4.2304e-10
6.7934e-09
3.2064e-08
1.9860e-07
3.5293e-06
1.4631e-05
9.6391e-05
4.5872e-04
semilogy(0:14, erro, 'o-')
O gráfico produzido foi
Observando o gráfico, no início vemos um decrescimento linear. Repare que o gráfico foi feito em escala logarítmica. Nesta escala, toda função polinomial é exibida com um aspecto linear, porém com diferentes inclinações, que dependem do grau do polinômio. Será que a inclinação observada no início do gráfico acima está correta? Não custa conferir. O gráfico abaixo exibe em como referência o valor de (em azul), que deveria ser o limitante superior para o erro.
De fato, até os resultados numéricos parecem consistentes com a teoria. Porém, para o erro numérico está acima do previsto, uma vez que a curva azul segue reduzindo indefinidamente. O que pode ter acontecido? Será que fizemos alguma hipótese que foi violada?
Essa discrepância entre teoria e experimento numérico vem do fato de que a função não é computada exatamente, uma vez que todas as contas são feitas em precisão finita. No caso das funções trigonométricas, mesmo os erros sendo pequenos, próximos à precisão da máquina, eles estão presentes. Ou seja, Desta forma, temos que a diferença centrada na avaliação numérica de é dada por Subtraindo em ambos os lados da igualdade acima e tirando o módulo, temos que o erro em precisão finita satisfaz onde usamos que , uma vez que não sabemos o sinal que assume.
A última desigualdade nos mostra que o limitante para o erro, no caso da função ser avaliada em precisão finita, tem um termo a mais quando comparado com o limitante para o caso de avaliação exata de função, expresso em . Este termo extra, , cresce a medida que diminui, e, em algum momento, passa a dominar o valor do erro. Para as funções trigonométricas , a unidade de arredondamento da máquina em precisão dupla.
Agora é possível se perguntar para que valor de o limitante para o erro, no caso em que as operações são feitas em um sistema de ponto flutuante, é o menor possível. Denotando este limitante por seu mínimo é determinado impondo a condição de que . Com um pouco de álgebra, chegamos ao valor ótimo para o passo de discretização, dado por uma vez que . Isto explica o crescimento observado nos gráficos acima, quando assumia valores menores que (pontos mais à direita no gráfico).
Para encerrar a questão, no gráfico abaixo novamente exibimos o erro experimental na aproximação da derivada pela fórmula de diferenças centradas (curva em preto). Exibimos também o gráfico de , o limitante para o erro, quando o impacto da computação em precisão finita é levado em consideração, dado por . Fica evidente que o erro experimental está de fato limitado por .
1. Tente reproduzir no Octave o experimento que foi descrito nesta aula. A escolha do ponto foi importante? Os resultados teriam sido diferentes se outro ponto fosse fixado?
2. Na discussão que fizemos, tomamos . Porém, lembrando da aula sobre polinômios de Taylor, para o caso em que está fixo, e apenas está variando, poderíamos tomar A medida que diminui, tende ao valor de . Refaça o último gráfico do texto, usando este valor para , no cálculo da curva azul. O que você observa?
3. Experimente descobrir empiricamente qual o valor ótimo de para estimar para as funções abaixo, usando a aproximação de diferenças centradas. Qual o menor erro absoluto atingido em cada caso? Qual o menor erro relativo em cada caso?