Interpolación y datos · Tema 19

Interpolación lineal y polinómica

Cómo estimar entre dos muestras mediante una recta, construir un polinomio que atraviese varios nodos y comprender por qué aumentar el grado no siempre mejora el resultado.

01 · Dos escalas

Una recta local o un polinomio global

Dados varios puntos, podemos conectar cada par consecutivo mediante segmentos o construir un único polinomio que atraviese todos los nodos.

Interpolación lineal

Usa dos puntos cercanos

Es local, simple y predecible. La curva resultante es continua, pero su pendiente cambia en los nodos.

Interpolación polinómica

Puede usar todos los puntos

Produce una función suave global, pero el grado y la distribución de nodos pueden causar oscilaciones.

02 · Dos nodos

La recta interpolante

Para los puntos (x₀,y₀) y (x₁,y₁), con x₀≠x₁, la pendiente es:

m = (y₁−y₀)/(x₁−x₀)

La forma punto-pendiente produce:

L(x) = y₀ + (x−x₀)(y₁−y₀)/(x₁−x₀)

Si x=x₀, el segundo término se anula y obtenemos y₀. Si x=x₁, el factor es uno y obtenemos y₁.

La fórmula no requiere que x sea el punto medio: funciona en cualquier posición del segmento y también puede prolongarse fuera de él, aunque entonces realiza extrapolación.

03 · Coordenada normalizada

Interpretar la interpolación mediante t

Definimos una coordenada relativa:

t = (x−x₀)/(x₁−x₀)

La recta puede escribirse como una combinación ponderada:

L(x) = (1−t)y₀ + ty₁
t=0
Estamos exactamente en el primer nodo y obtenemos y₀.
t=1
Estamos en el segundo nodo y obtenemos y₁.
0<t<1
La estimación está entre ambos valores: es interpolación.
t<0 o t>1
La recta se prolonga fuera del segmento: es extrapolación.

Esta misma idea aparece en animaciones, mezclas de colores, transiciones y gráficos bajo nombres como lerp.

04 · Ejemplo

Estimar una temperatura

A las 10:00 se midieron 18 °C y a las 12:00, 24 °C. Para las 11:30:

t = (11.5−10)/(12−10) = 0.75
L(11.5) = (1−0.75)18 + 0.75·24 = 22.5

La estimación es 22.5 °C. Esto supone que la temperatura cambió a velocidad constante durante esas dos horas.

function interpolarLineal(x0, y0, x1, y1, x) {
  if (![x0, y0, x1, y1, x].every(Number.isFinite)) {
    throw new Error("Todos los valores deben ser finitos");
  }
  if (x0 === x1) throw new Error("Los nodos deben ser distintos");
  const t = (x - x0) / (x1 - x0);
  return y0 + t * (y1 - y0);
}

console.log(interpolarLineal(10, 18, 12, 24, 11.5)); // 22.5

05 · Varios datos

Interpolación lineal por tramos

Con nodos ordenados x₀<x₁<…<xₙ, una consulta dentro del intervalo pertenece a un tramo [xᵢ,xᵢ₊₁]. Aplicamos la fórmula lineal únicamente a esos dos puntos.

  1. 1
    Ordenar y validar.

    Conservar pares y rechazar nodos duplicados.

  2. 2
    Localizar el tramo.

    Usar búsqueda lineal para pocos datos o búsqueda binaria para muchos.

  3. 3
    Normalizar.

    Calcular t=(x−xᵢ)/(xᵢ₊₁−xᵢ).

  4. 4
    Combinar.

    Evaluar (1−t)yᵢ+tyᵢ₊₁.

La función resultante es continua: los segmentos comparten el mismo valor en cada nodo. No suele ser derivable allí porque las pendientes vecinas pueden ser diferentes.

06 · Implementación local

Encontrar el intervalo con búsqueda binaria

function interpoladorPorTramos(puntos) {
  const datos = puntos.map(p => ({ ...p })).sort((a, b) => a.x - b.x);
  if (datos.length < 2) throw new Error("Se requieren al menos dos puntos");
  for (let i = 1; i < datos.length; i++) {
    if (datos[i].x === datos[i - 1].x) throw new Error("Nodo duplicado");
  }

  return x => {
    let izquierda = 0;
    let derecha = datos.length - 2;
    if (x <= datos[0].x) derecha = 0;
    else if (x >= datos.at(-1).x) izquierda = derecha;
    else {
      while (izquierda < derecha) {
        const medio = Math.floor((izquierda + derecha + 1) / 2);
        if (datos[medio].x <= x) izquierda = medio;
        else derecha = medio - 1;
      }
    }
    const p = datos[izquierda];
    const q = datos[izquierda + 1];
    const t = (x - p.x) / (q.x - p.x);
    return p.y + t * (q.y - p.y);
  };
}

const f = interpoladorPorTramos([
  { x: 0, y: 1 }, { x: 2, y: 5 }, { x: 5, y: 2 }
]);
console.log(f(3)); // 4

La política del ejemplo extrapola con el segmento extremo. Otra API podría rechazar consultas exteriores o limitar el resultado al nodo más cercano.

07 · Precisión local

Error de la interpolación lineal

Si f posee segunda derivada continua, para algún punto ξ del intervalo:

f(x)−L(x) = f″(ξ)(x−x₀)(x−x₁)/2

Si |f″(x)|≤M y h=x₁−x₀, entonces:

|f(x)−L(x)| ≤ M h² / 8

La recta es exacta para cualquier función lineal, porque su segunda derivada es cero. En funciones curvas, reducir a la mitad la separación h puede reducir aproximadamente el error máximo por un factor de cuatro.

08 · Más de dos nodos

El polinomio interpolante

Para n+1 nodos distintos buscamos:

pₙ(x) = a₀ + a₁x + a₂x² + … + aₙxⁿ

y exigimos pₙ(xᵢ)=yᵢ. Hay n+1 condiciones para n+1 coeficientes, y existe una única solución.

El grado real puede ser menor que n. Por ejemplo, si todos los datos pertenecen a una recta, los coeficientes de mayor grado resultan cero.

Cantidad de nodos y grado máximo.
Nodos distintosGrado máximoCaso
21Recta
32Cuadrática
43Cúbica
n+1nPolinomio general

09 · Sistema de coeficientes

La matriz de Vandermonde

Al imponer las condiciones de interpolación obtenemos:

[ 1   x₀   x₀²   …   x₀ⁿ ; … ; 1   xₙ   xₙ²   …   xₙⁿ ][a₀,…,aₙ]ᵀ = [y₀,…,yₙ]ᵀ

Esta matriz se denomina Vandermonde. Su determinante es:

det(V) = ∏0≤i<j≤n(xⱼ−xᵢ)

Si los nodos son distintos, ningún factor es cero y el sistema tiene solución única. Sin embargo, la base de potencias puede estar muy mal condicionada cuando el grado aumenta o los nodos tienen escalas desfavorables.

10 · Tres puntos

Construir una parábola interpolante

Dados (0,1), (1,2) y (2,5), proponemos:

p₂(x)=a₀+a₁x+a₂x²

Las condiciones producen:

a₀ = 1
a₀+a₁+a₂ = 2
a₀+2a₁+4a₂ = 5

La solución es a₀=1, a₁=0 y a₂=1:

p₂(x)=1+x²

Así, p₂(1.5)=3.25. El polinomio pasa exactamente por los tres datos y proporciona valores intermedios suaves.

11 · Error global

Resto de la interpolación polinómica

Si f posee suficientes derivadas, el error en un punto x puede escribirse como:

f(x)−pₙ(x) = f(n+1)(ξ)/(n+1)! · ∏i=0n(x−xᵢ)

La fórmula separa dos influencias:

  • la derivada de orden n+1, que mide el comportamiento de la función;
  • el producto de distancias a los nodos, que depende de su ubicación.

El error es cero en cada nodo porque uno de los factores (x−xᵢ) se anula. Entre nodos, la distribución elegida puede aumentar o reducir mucho el producto.

12 · Grado alto

Fenómeno de Runge y elección de nodos

La función:

f(x)=1/(1+25x²),    −1≤x≤1

es suave, pero sus polinomios interpolantes sobre muchos nodos uniformes pueden oscilar fuertemente cerca de −1 y 1. Este comportamiento se conoce como fenómeno de Runge.

Algunas respuestas posibles son:

  • usar interpolación por tramos en lugar de un polinomio global;
  • emplear splines de bajo grado;
  • distribuir nodos más densamente cerca de los extremos, como los nodos de Chebyshev;
  • reducir el grado o trabajar por subintervalos;
  • usar una representación numéricamente estable del mismo polinomio.

Aumentar la cantidad de nodos uniformes puede empeorar el máximo error, aunque la curva siga atravesando todos ellos.

13 · Programación eficiente

Evaluar coeficientes con Horner

Si ya conocemos los coeficientes en base de potencias, no conviene calcular cada potencia por separado. El esquema de Horner reagrupa:

p(x)=a₀+x(a₁+x(a₂+…+xaₙ)…)
function horner(coeficientes, x) {
  if (coeficientes.length === 0) throw new Error("Faltan coeficientes");
  let resultado = coeficientes.at(-1);
  for (let i = coeficientes.length - 2; i >= 0; i--) {
    resultado = resultado * x + coeficientes[i];
  }
  return resultado;
}

// p(x) = 1 + x²; coeficientes en orden creciente.
console.log(horner([1, 0, 1], 1.5)); // 3.25

Horner necesita n multiplicaciones y n sumas para un polinomio de grado n. Aun así, una representación alternativa puede ser preferible a formar los coeficientes monomiales mediante Vandermonde.

14 · Exploración interactiva

Laboratorio: local contra global

Elegí una función, cambiá la cantidad de nodos uniformes y mové la consulta. La curva dorada es lineal por tramos; la turquesa es el polinomio global calculado resolviendo el sistema de Vandermonde.

EXPERIMENTO 19

Nodos, grado y oscilación

f(x)=1/(1+25x²)

Los resultados numéricos aparecen debajo.
Valor verdadero—
Lineal · error—
Polinomio · error—
Grado máximo6

Agregá nodos y observá los extremos de la curva polinómica.

Preguntas para explorar

  1. En Runge, aumentá hasta once nodos y observá cerca de x=0.9.
  2. En la función cuadrática, ¿cuántos nodos necesita el polinomio para ser exacto?
  3. En valor absoluto, compará el comportamiento alrededor del punto no derivable.
  4. Mové la consulta sobre un nodo: ambos errores deberían ser prácticamente cero.

15 · Comprensión

Confusiones frecuentes

«Interpolación lineal significa una sola recta para todos los datos»

Con varios nodos suele significar una recta diferente en cada tramo consecutivo.

«n puntos determinan un polinomio de grado n»

n puntos distintos determinan un polinomio de grado máximo n−1.

«El polinomio de mayor grado siempre es más preciso»

Puede oscilar, ser sensible al redondeo y empeorar cerca de los extremos.

«Un sistema de Vandermonde invertible es necesariamente estable»

Invertibilidad garantiza unicidad exacta; el condicionamiento determina la sensibilidad numérica.

«Horner corrige una interpolación mal elegida»

Horner evalúa eficientemente los coeficientes existentes, pero no elimina las oscilaciones propias del modelo o los errores al construirlos.

16 · Práctica guiada

Ejercicios

Ejercicio 1: interpolación lineal

Interpolá en x=4 entre (2,10) y (5,22).

Ver solución

t=(4−2)/(5−2)=2/3. Entonces L(4)=10+(2/3)(22−10)=18.

Ejercicio 2: interpolar o extrapolar

Para los mismos puntos, ¿qué representa evaluar en x=7?

Ver solución

Es extrapolación porque 7 está fuera de [2,5]. La fórmula funciona, pero prolonga la pendiente sin evidencia adicional.

Ejercicio 3: grado máximo

¿Cuál es el grado máximo del polinomio determinado por seis nodos distintos?

Ver solución

Grado 5. En general, n+1 nodos determinan un polinomio de grado máximo n.

Ejercicio 4: cota lineal

Si |f″|≤4 y los nodos están separados por h=0.2, calculá la cota Mh²/8.

Ver solución razonada

4·0.2²/8=4·0.04/8=0.02.

Ejercicio 5: verificar nodos

Implementá una función que calcule el mayor error del polinomio en los nodos.

Ver una posible solución
function errorEnNodos(puntos, evaluar) {
  return Math.max(...puntos.map(({ x, y }) =>
    Math.abs(y - evaluar(x))
  ));
}

const puntos = [{ x: 0, y: 1 }, { x: 1, y: 2 }, { x: 2, y: 5 }];
const p = x => 1 + x * x;
console.log(errorEnNodos(puntos, p)); // 0

17 · Síntesis

Ideas para recordar

  • Dos puntos distintos determinan una única recta interpolante.
  • El parámetro t expresa la posición relativa dentro del segmento.
  • La interpolación lineal por tramos es local y continua, pero no suele ser suave en los nodos.
  • Su error depende de la curvatura y del cuadrado de la separación entre nodos.
  • n+1 nodos distintos determinan un polinomio único de grado máximo n.
  • Vandermonde demuestra la unicidad, pero puede estar mal condicionada.
  • El error polinómico depende de las derivadas y de la distribución de nodos.
  • El fenómeno de Runge muestra que más nodos uniformes pueden empeorar la aproximación.
  • Horner evalúa eficientemente un polinomio dado en base de potencias.

En el próximo tema construiremos el mismo polinomio mediante las bases de Lagrange, sin resolver explícitamente el sistema de Vandermonde.