Derivadas a partir de Taylor

A expansão de Taylor fornece as fórmulas de diferenças finitas. De \(f(x\pm h)\):

\[f(x+h) = f(x) + h f'(x) + \frac{h^2}{2}f''(x) + \ldots\]

Isolando \(f'(x)\) obtêm-se aproximações de diferentes ordens de erro.

Diferenças finitas

Fórmula Aproximação Erro
Progressiva \(\dfrac{f(x+h) - f(x)}{h}\) \(O(h)\)
Regressiva \(\dfrac{f(x) - f(x-h)}{h}\) \(O(h)\)
Central \(\dfrac{f(x+h) - f(x-h)}{2h}\) \(O(h^2)\)

A diferença central cancela o termo de \(f''\), sendo mais precisa para o mesmo \(h\).

Derivada segunda

A combinação simétrica de três pontos aproxima \(f''\):

\[f''(x) \approx \frac{f(x+h) - 2f(x) + f(x-h)}{h^2} + O(h^2)\]

Base da discretização de EDOs e EDPs (ex.: \(-u'' = g\)).

import numpy as np

f = lambda x: np.sin(x)
x, h = 1.0, 1e-4
d2 = (f(x+h) - 2*f(x) + f(x-h)) / h**2
print(d2, -np.sin(1.0))            # ≈ -0.8415

O dilema do passo \(h\)

  • \(h\) grande \(\Rightarrow\) erro de truncamento alto.
  • \(h\) pequeno \(\Rightarrow\) cancelamento na subtração de valores próximos.

Há um \(h\) ótimo que minimiza o erro total.

Para a diferença central, o erro total é minimizado em torno de:

\[h_{\text{ót}} \sim \varepsilon_m^{1/3} \approx 6\times 10^{-6}\]

Important

Reduzir \(h\) indefinidamente não melhora a precisão — diferentemente do comportamento analítico.

Extrapolação de Richardson

Combina duas estimativas com passos \(h\) e \(h/2\) para eliminar o termo de erro dominante:

\[D = \frac{2^{p}\,D(h/2) - D(h)}{2^{p} - 1}\]

onde \(p\) é a ordem do método base (ex.: \(p=2\) para a diferença central).

def richardson(f, x, h, p=2):
    D1 = (f(x+h)   - f(x-h))   / (2*h)
    D2 = (f(x+h/2) - f(x-h/2)) / (h)
    return (2**p * D2 - D1) / (2**p - 1)

Diferenciação em Python

import numpy as np

x = np.linspace(0, 2*np.pi, 50)
y = np.sin(x)

dydx = np.gradient(y, x)           # diferença central no interior
# nas bordas, np.gradient usa diferenças unilaterais automaticamente

Tip

np.gradient é adequado para dados tabelados. Para derivadas de alta ordem ou malhas irregulares, há bibliotecas como findiff.

Exercícios

  1. Tabele o erro da diferença central de \(\frac{d}{dx}\sin x\) em \(x=1\) para \(h = 10^{-1},\ldots,10^{-12}\) e localize o \(h\) ótimo.
  2. Deduza a fórmula de \(f''\) a partir das expansões de Taylor de \(f(x\pm h)\).
  3. Aplique a extrapolação de Richardson e compare com a diferença central simples.
  4. Estime a velocidade e a aceleração a partir de uma tabela de posição \((t, s)\).