Interpolar ou ajustar?

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.

Mínimos quadrados

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.

Regressão linear e polinomial

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 linearizáveis

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:

from scipy.optimize import curve_fit

modelo = lambda x, a, b: a * np.exp(b * x)
popt, pcov = curve_fit(modelo, x, y, p0=[1.0, 0.1])

Splines cúbicos

Interpolação por partes: um polinômio cúbico em cada subintervalo, com continuidade de \(S\), \(S'\) e \(S''\) nos nós.

import numpy as np
from scipy.interpolate import CubicSpline

x = np.linspace(-1, 1, 11)
y = 1 / (1 + 25*x**2)            # função de Runge
S = CubicSpline(x, y, bc_type='natural')

xx = np.linspace(-1, 1, 400)
yy = S(xx)                       # sem oscilação de bordas
  • Evita o fenômeno de Runge;
  • Curva suave (\(C^2\));
  • Base de modelagem CAD e gráficos.

Exercícios

  1. Ajuste uma reta a dados experimentais e calcule \(R^2\) e o resíduo máximo.
  2. Linearize \(y = a\,e^{bx}\), estime \(a,b\) e compare com curve_fit (ajuste direto).
  3. Interpole a função de Runge com CubicSpline e compare ao polinômio de grau 10.
  4. Ajuste um polinômio de grau 2 e de grau 5 ao mesmo conjunto ruidoso e discuta sobreajuste.