∫Atlas Matemáticas Aplicadas

Inicio › Temas › Métodos numéricos

🔢 Métodos numéricos nivel medio

Interpolación polinómica

El polinomio de Lagrange que pasa por todos los puntos, el fenómeno de Runge y cómo evitarlo.

🕹️ Ábrelo en el curso interactivo (simulador y código ejecutable)

La idea

Interpolar es construir una función que pase exactamente por un conjunto de puntos (x₀, y₀), …, (xₙ, yₙ) conocidos. Con n + 1 puntos de abscisas distintas existe un único polinomio de grado ≤ n que los atraviesa. La fórmula de Lagrange lo escribe como combinación de polinomios básicos Lᵢ(x) que valen 1 en xᵢ y 0 en el resto de nodos: p(x) = Σ yᵢ Lᵢ(x), con Lᵢ(x) = Π_{j≠i} (x − xⱼ)/(xᵢ − xⱼ). No hay que resolver ningún sistema: el polinomio se evalúa directamente.

Si los datos vienen de una función f suave, el error de interpolación vale f⁽ⁿ⁺¹⁾(ξ)/(n + 1)! · Π(x − xᵢ). Uno esperaría que más puntos den mejor aproximación, pero el fenómeno de Runge lo desmiente: con nodos equiespaciados sobre f(x) = 1/(1 + 25x²) en [−1, 1], el polinomio oscila cada vez más cerca de los extremos y el error máximo crece sin límite al aumentar n. El culpable es el producto Π(x − xᵢ), que se dispara cerca de los bordes, unido al crecimiento de las derivadas de f.

Hay dos remedios. El primero es elegir mejor los nodos: los nodos de Chebyshev xᵢ = cos((2i + 1)π/(2n + 2)) se concentran en los extremos, minimizan el producto y hacen que el error decrezca al aumentar n. El segundo es renunciar al polinomio único y usar interpolación a trozos: segmentos rectos entre puntos consecutivos (lineal a trozos, con error del orden de h²) o cúbicas empalmadas con derivadas continuas (splines), que es lo que emplean los programas de dibujo, las fuentes tipográficas y las animaciones.

Fórmulas clave

  • Polinomio de Lagrangep(x) = Σᵢ yᵢ Lᵢ(x), Lᵢ(x) = Π_{j≠i} (x − xⱼ) / (xᵢ − xⱼ)
  • Error de interpolaciónf(x) − p(x) = f⁽ⁿ⁺¹⁾(ξ) / (n+1)! · Π (x − xᵢ)
  • Nodos de Chebyshevxᵢ = cos[(2i + 1)π / (2n + 2)], i = 0…n
  • Función de Rungef(x) = 1 / (1 + 25x²), x ∈ [−1, 1]
  • Lineal a trozosp(x) = yᵢ + (yᵢ₊₁ − yᵢ)(x − xᵢ)/(xᵢ₊₁ − xᵢ), error ≤ h² máx|f''| / 8

Dónde se aplica

Las curvas de Bézier de los programas de diseño y las fuentes TrueType son polinomios a trozos de grado bajo: nadie usa un solo polinomio de grado 50. En animación, los fotogramas clave se interpolan con splines para que el movimiento sea suave. En ingeniería, las tablas de vapor o las propiedades de materiales se consultan por interpolación lineal entre valores tabulados. Y en ciencia de datos, rellenar huecos en una serie temporal o remuestrear una señal de audio a otra frecuencia son problemas de interpolación donde elegir el método marca la diferencia entre un resultado limpio y uno con artefactos.

Con programación (Python)

import math

def lagrange(xs, ys, x):
    total = 0.0
    for i, (xi, yi) in enumerate(zip(xs, ys)):
        L = 1.0
        for j, xj in enumerate(xs):
            if j != i:
                L *= (x - xj) / (xi - xj)
        total += yi * L
    return total

xs, ys = [0, 1, 2, 4], [1, 3, 2, 5]
for x in (0.5, 1.5, 3):
    print(f"p({x}) = {lagrange(xs, ys, x):.4f}")

# Fenómeno de Runge: error máximo con nodos equiespaciados y de Chebyshev
runge = lambda x: 1 / (1 + 25 * x * x)
def error_max(nodos):
    vals = [runge(t) for t in nodos]
    return max(abs(lagrange(nodos, vals, -1 + k / 200) - runge(-1 + k / 200)) for k in range(401))

for n in (5, 9, 13, 17):
    equi = [-1 + 2 * i / (n - 1) for i in range(n)]
    cheb = [math.cos((2 * i + 1) * math.pi / (2 * n)) for i in range(n)]
    print(f"n={n:2d}  equiespaciados={error_max(equi):.2e}  Chebyshev={error_max(cheb):.2e}")

La versión en JavaScript, editable y ejecutable en el navegador, está en la página interactiva del tema.

Temas relacionados

Polinomios de Taylor · Mínimos cuadrados · Regresión lineal simple

← Todos los temas