Ir al contenido
Background Image

Interpolación y Regresión en Ingeniería Mecánica con Python

1651 palabras·8 mins·
Tabla de contenido
Métodos Numéricos - Este artículo es parte de una serie.
Parte 7: Este artículo

📈 Módulo 7: Interpolación y Regresión
#


📊 La Modelización de Datos Discretos
#

Tanto la Interpolación como la Regresión son técnicas utilizadas para modelar la relación entre variables a partir de un conjunto de datos discretos \((x_i, y_i)\). La diferencia en su objetivo es crucial:

Interpolación (Fidelidad de Puntos)
#

Busca construir una función que pase exactamente por todos los puntos de datos. Es ideal cuando los datos son precisos y se necesita estimar un valor intermedio.

Regresión (Fidelidad de Tendencia)
#

Busca la mejor función de ajuste que capture la tendencia general de los datos, minimizando el error cuadrático total. Es indispensable para datos ruidosos o experimentales.

Interpolación Regresión
Pasa por todos los puntos Minimiza la distancia a todos los puntos
Usado para estimar valores intermedios Usado para modelar tendencias y hacer predicciones
Sensible al ruido (el ruido se incorpora) Robusto al ruido (el ruido se suaviza)

#

🖼️ Ilustración Conceptual
#

La diferencia entre interpolación y regresión radica en cómo manejan el error y el ruido de los datos:

Ejemplo de Interpolación Numérica (Spline Cúbico)
#

Ejemplo de Interpolación Numérica

La curva de interpolación pasa por todos los nodos (puntos de datos).

Ejemplo de Regresión Numérica (Mínimos Cuadrados)
#

Ejemplo de Regresión Numérica

La línea de regresión modela la tendencia general, sin pasar necesariamente por ningún punto, para suavizar el ruido.


🧮 Parte I: Interpolación
#

La interpolación se realiza típicamente con polinomios.

1. Polinomio de Interpolación de Lagrange
#

Construye un único polinomio de grado \(n\) que pasa por \(n+1\) puntos.

$$\mathbf{P_n(x) = \sum_{i=0}^{n} y_i L_i(x)}$$
  • Desventajas: Los polinomios de alto grado a menudo sufren el Fenómeno de Runge (grandes oscilaciones en los bordes), haciendo que la estimación sea inestable.

2. Interpolación con Splines Cúbicos (Cubic Spline)
#

Es el método estándar en ingeniería. Divide el conjunto de datos en intervalos y utiliza un polinomio cúbico diferente para cada uno, exigiendo continuidad de la función, la primera derivada y la segunda derivada en los puntos de unión (nodos). Esto asegura una curva suave y físicamente plausible.


📉 Parte II: Regresión Lineal y No Lineal
#

El método de Mínimos Cuadrados es el corazón de la regresión, buscando minimizar la Suma de Cuadrados de los Errores (SSE), \(E = \sum e_i^2\).

1. Regresión Lineal Simple
#

Busca el mejor ajuste a la forma \(y = ax + b\). Los coeficientes \(a\) y \(b\) se encuentran resolviendo las ecuaciones normales.

$$\mathbf{a = \frac{n \sum (x_i y_i) - \sum x_i \sum y_i}{n \sum (x_i^2) - (\sum x_i)^2}} \quad \text{y} \quad \mathbf{b = \bar{y} - a\bar{x}}$$
  • Coeficiente de Determinación (\(R^2\)): Mide la bondad del ajuste. \(R^2 \approx 1\) indica que el modelo explica casi toda la variabilidad de los datos.

2. Regresión Polinomial y Múltiple
#

Extiende el principio de Mínimos Cuadrados a modelos de orden superior (\(y = a_0 + a_1 x + a_2 x^2 + \dots\)) o a múltiples variables independientes.


💻 Herramientas de Python
#

Función Propósito Librería
numpy.polyfit Regresión Polinomial (Mínimos Cuadrados) NumPy
scipy.interpolate.interp1d Interpolación (Lineal, Cúbica, etc.) SciPy
scipy.optimize.curve_fit Regresión No Lineal (Ajuste a función definida por usuario) SciPy

📝 Ejercicios Propuestos (30 Ejercicios)
#

A. Interpolación Manual y Conceptual (8 Ejercicios)
#

  1. Interpolación Lineal Manual: Dados los puntos \((1, 2)\) y \((3, 8)\).

    • Tarea: Utiliza la fórmula de interpolación lineal para estimar el valor de \(y\) en \(x=1.5\).
  2. Fenómeno de Runge (Conceptual):

    • Pregunta de Análisis: Explica brevemente por qué la Interpolación Polinomial de Alto Grado es generalmente una mala elección y cómo el Spline Cúbico mitiga este problema.
  3. Uso de Splines Cúbicos (scipy): Dados \(x = [0, 1, 2, 3]\) y \(y = [0, 1, 0, -1]\).

    • Tarea: Utiliza scipy.interpolate.interp1d con el método 'cubic' para estimar \(y\) en \(x=1.5\).
  4. Interpolación Lineal en SciPy: Usando los datos del ejercicio 3, utiliza interp1d con el método 'linear' para estimar \(y\) en \(x=1.5\). Compara la diferencia con el resultado cúbico.

  5. Interpolación Extrapolación (Riesgo): Dados \(x=[0, 1, 2]\) y \(y=[1, 2, 4]\).

    • Tarea: Crea un interpolador cúbico (interp1d). Intenta estimar \(y\) en \(x=3.0\) y \(x=-1.0\).
    • Pregunta de Análisis: ¿Por qué la extrapolación es inherentemente riesgosa en la interpolación?
  6. Interpolación con Splines para Suavizado:

    • Tarea: Crea 10 puntos de datos a partir de \(f(x) = \cos(x)\) en \([0, 2\pi]\). Añádeles un pequeño ruido aleatorio.
    • Tarea: Usa interp1d (método 'cubic') para crear 100 puntos intermedios y visualiza el resultado.
  7. Diferencia Dividida (Lagrange Conceptual):

    • Pregunta de Análisis: ¿Cuál es la principal ventaja de usar la formulación de Diferencias Divididas de Newton sobre la forma estándar de Lagrange cuando se planea añadir más puntos de datos?
  8. Requerimientos del Spline:

    • Pregunta de Análisis: Para que un Spline Cúbico sea considerado “natural”, ¿qué condición de segunda derivada se debe aplicar en los puntos de borde (\(x_0\) y \(x_n\))?

B. Regresión Lineal (Mínimos Cuadrados) (8 Ejercicios)
#

  1. Cálculo Manual de Coeficientes: Dados los puntos \((1, 6), (2, 8), (3, 10)\).

    • Tarea: Calcula manualmente los coeficientes \(a\) y \(b\) para la recta de mejor ajuste \(y=ax+b\) usando las fórmulas de Mínimos Cuadrados.
  2. Regresión con NumPy (Rigidez de Viga): Un ingeniero mide la deflexión \(D\) de una viga bajo diferentes cargas \(L\).

    Carga (\(L\)) [kN] Deflexión (\(D\)) [mm]
    5 1.05
    10 2.05
    15 3.10
    20 4.00
    • Tarea: Utiliza numpy.polyfit para encontrar la relación lineal \(D = aL + b\). ¿Cuál es la pendiente \(a\)?
  3. Cálculo de \(R^2\):

    • Tarea: Usando los datos del ejercicio 10, calcula el coeficiente de determinación (\(R^2\)) para el ajuste lineal. Interpreta este valor.
  4. Predicción con Regresión: Usando la ecuación de regresión obtenida en el ejercicio 10, ¿cuál es la deflexión esperada para una carga de \(12 \text{ kN}\)?

  5. Regresión con Origen Forzado (Sin intercepto):

    • Tarea: Ajusta los datos del ejercicio 10 a un modelo \(D = aL\) (sin intercepto). Utiliza la fórmula modificada \(a = \sum (x_i y_i) / \sum (x_i^2)\).
  6. Residuales y Homocedasticidad:

    • Tarea: Usando los datos del ejercicio 10, calcula el vector de residuales (\(y_i - \hat{y}_i\)).
    • Pregunta de Análisis: ¿Cómo podría un gráfico de los residuales vs. \(x\) ayudar a determinar si un ajuste lineal es apropiado?
  7. Regresión en un Conjunto de Datos de Ingeniería (Viscosidad): Estima la viscosidad (\(\mu\)) de un fluido a diferentes temperaturas (\(T\)).

    Temperatura (\(T\)) [K] Viscosidad (\(\mu\)) [mPa·s]
    280 1.25
    300 0.98
    320 0.81
    340 0.69
    • Tarea: ¿Un ajuste lineal es apropiado? ¿Qué indica el signo de la pendiente en este contexto físico?
  8. Regresión Lineal Múltiple (Conceptual):

    • Pregunta de Análisis: Si tuvieras que modelar el rendimiento de un motor (\(R\)) en función de la temperatura (\(T\)) y la velocidad (\(S\)), la regresión sería \(R = a_0 + a_1 T + a_2 S\). ¿Qué librería de Python se usaría para encontrar los coeficientes \(a_0, a_1, a_2\)?

C. Regresión Polinomial y No Lineal (14 Ejercicios)
#

  1. Ajuste Polinomial (Grado 2): Ajusta \(x = [0, 1, 2, 3, 4]\) y \(y = [1.0, 0.9, 1.4, 2.5, 4.1]\) a un polinomio de segundo grado.

    • Tarea: Utiliza numpy.polyfit (grado 2) para encontrar los tres coeficientes.
  2. Selección de Modelo (Grado Óptimo): Usando los datos del ejercicio 17, ajusta a polinomios de grado 1, 2 y 3.

    • Tarea: Calcula el \(R^2\) para cada uno. ¿Qué grado es el más apropiado?
  3. Regresión Logarítmica (Linealizable): Ajusta la ecuación de la forma \(y = a \ln(x) + b\) a \(x = [1, 2, 3, 4]\) y \(y = [0.1, 0.7, 1.1, 1.4]\).

    • Pista: Usa \(\mathbf{X} = \ln(x)\). Aplica numpy.polyfit a \((\mathbf{X}, y)\).
  4. Regresión Exponencial No Lineal (Enfriamiento): Un proceso sigue \(T(t) = A e^{-kt} + C\).

    • Tarea: Define una función Python para este modelo y utiliza scipy.optimize.curve_fit para ajustar \(t = [0, 1, 2, 3, 4, 5]\) y \(T = [100.0, 75.0, 56.0, 44.0, 36.0, 31.0]\).
    • Pregunta: ¿Cuál es el valor ajustado del parámetro de decaimiento \(k\)?
  5. Ajuste de la Ecuación de Michaelis-Menten (Bioingeniería): Ajusta la ecuación \(V = \frac{V_{\max} [S]}{K_m + [S]}\) a los siguientes datos:

    $$[S] = [0.1, 0.5, 1.0, 2.0, 5.0]$$

    $$V = [0.05, 0.23, 0.38, 0.54, 0.70]$$
    • Tarea: Utiliza scipy.optimize.curve_fit para estimar \(V_{\max}\) y \(K_m\).
  6. Ajuste de una Función de Potencia: Ajusta la ecuación de la forma \(y = ax^b\) (Ley de Potencia).

    • Pista: Linealiza usando \(\ln(y) = \ln(a) + b \ln(x)\).
    • Tarea: Utiliza esta linealización con numpy.polyfit para ajustar \(x = [1, 2, 3, 4]\) y \(y = [2.0, 8.1, 17.9, 32.2]\).
  7. Evaluación de la Matriz de Covarianza:

    • Pregunta de Análisis: ¿Cómo se relaciona la raíz cuadrada de los elementos de la diagonal principal de la matriz de covarianza (devuelta por curve_fit) con la fiabilidad del ajuste?
  8. Necesidad de Valores Iniciales (p0):

    • Pregunta de Análisis: ¿Por qué la función scipy.optimize.curve_fit a menudo requiere un argumento inicial p0 (una suposición de los parámetros) para modelos complejos no lineales?
  9. Modelos Polinomiales para Interpolación:

    • Pregunta de Análisis: Si tuvieras que usar numpy.polyfit para interpolar exactamente \(n\) puntos, ¿qué grado de polinomio tendrías que especificar?
  10. Modelo Logístico (Población): Modelar el crecimiento de la población (\(P\)) usando una curva logística \(P(t) = \frac{L}{1 + e^{-k(t-t_0)}}\).

    • Tarea: Utiliza curve_fit para ajustar \(t = [1, 2, 3, 4, 5, 6, 7]\) y \(P = [10, 20, 40, 70, 120, 160, 180]\).
  11. Residuales Cuadráticos:

    • Tarea: Para el ajuste lineal del ejercicio 10, calcula la Suma de Cuadrados de los Errores (SSE), el valor que el método de Mínimos Cuadrados minimiza.
  12. Ajuste de una Función de Vibración Amortiguada: Ajusta una señal de vibración amortiguada \(y(t) = A e^{-\zeta t} \cos(\omega t + \phi)\).

    • Tarea: Define la función y usa curve_fit para ajustar \(t = [0, 0.5, 1.0, 1.5, 2.0, 2.5]\) y \(y = [5.0, 3.5, 1.5, -0.1, -1.0, -0.9]\). (Asume \(\omega=5\) y \(\phi=0\) conocidos, solo ajusta \(A\) y \(\zeta\)).
  13. Interpolación Extrema y Segmentación:

    • Pregunta de Análisis: Si la función tiene un cambio de régimen abrupto (ej. un límite elástico), ¿por qué es mejor realizar la regresión o la interpolación Spline en dos segmentos separados?
  14. Interpolación vs. Regresión (Decisión de Ingeniería): Tienes 1000 mediciones de presión con error de \(\pm 5 \text{ kPa}\). Necesitas el valor de la presión en \(t=5.5 \text{ min}\).

    • Pregunta de Decisión: ¿Debes usar la Interpolación Spline Cúbica o la Regresión Polinomial? Justifica tu elección.
Métodos Numéricos - Este artículo es parte de una serie.
Parte 7: Este artículo