Cálculo Numérico
Universidade Federal do Pará
Interpolação: a curva passa por todos os pontos. Adequada a dados precisos.
Ajuste: a curva captura a tendência sem passar pelos pontos. Adequada a dados com ruído experimental.
Note
Em Engenharia, dados de medição contêm incerteza — o ajuste por mínimos quadrados é, em geral, preferível à interpolação.
Minimiza-se a soma dos quadrados dos resíduos \(r_i = y_i - g(x_i)\):
\[\min_{\mathbf{a}} \; S(\mathbf{a}) = \sum_{i=1}^{m} \bigl[\,y_i - g(x_i;\mathbf{a})\,\bigr]^2\]
Para um modelo linear nos parâmetros, \(g = \sum_j a_j\,\phi_j(x)\), a condição \(\nabla S = 0\) leva às equações normais:
\[(\Phi^\top \Phi)\,\mathbf{a} = \Phi^\top \mathbf{y}\]
Important
Resolva via decomposição QR ou lstsq — formar \(\Phi^\top\Phi\) explicitamente eleva o número de condição ao quadrado.
import numpy as np
x = np.array([0., 1., 2., 3., 4., 5.])
y = np.array([2.1, 2.9, 3.7, 5.2, 6.0, 7.1])
# Reta: y = a1 x + a0
a1, a0 = np.polyfit(x, y, 1)
# Ajuste polinomial de grau 2 (mínimos quadrados)
coef = np.polyfit(x, y, 2)
# Coeficiente de determinação R²
yh = np.polyval([a1, a0], x)
R2 = 1 - np.sum((y - yh)**2) / np.sum((y - y.mean())**2)
print(a1, a0, R2)Modelos não lineares podem ser ajustados após transformação:
| Modelo | Linearização |
|---|---|
| \(y = a\,e^{bx}\) | \(\ln y = \ln a + b x\) |
| \(y = a\,x^{b}\) | \(\ln y = \ln a + b\ln x\) |
Para o ajuste não linear direto (sem transformar), usa-se curve_fit:
Interpolação por partes: um polinômio cúbico em cada subintervalo, com continuidade de \(S\), \(S'\) e \(S''\) nos nós.
curve_fit (ajuste direto).CubicSpline e compare ao polinômio de grau 10.