Página web del curso

Interpolación lineal a trozos

Ya hemos visto como se construye el polinomio de interpolación de Lagrange. ¿Cómo podría mejorarse el resultado? Es decir, ¿cómo conseguir que el error sea más pequeño? ¿Añadiendo nodos? El problema es que si aumentamos el número de nodos, aumenta el grado del polinomio de interpolación. Y los polinomios de grados altos pueden dar errores muy grandes debido a grandes oscilaciones.

Por ejemplo, en el ejemplo siguiente, interpolamos la función $$f(x) = \frac{1}{1+25x^2}$$ con $11$ nodos equiespaciados en el intervalo $[-1,1]$ y el error relativo en puntos cercanos a los extremos es enorme.

Por esta razón no se suelen emplear polinomios de interpolación de grados altos. Una solución es usar los nodos de Chebysev, que son las raíces del polinomio de Chebysev (están en el intervalo $[-1,1]$ pero con una transformación lineal se pueden obtener para cualquier intervalo cerrado).

El problema es que no siempre podemos elegir los nodos.

La solución más comunmente utilizada es la interpolación a trozos. Se divide el intervalo en subintervalos y en cada uno de ellos se interpola con un polinomio de grado 1, 2 ó 3. En la práctica lo más común es

  • La interpolación lineal a trozos: se utilizan polinomios de grado uno en cada subintervalo. Este método tiene la ventaja de que es muy sencillo y requiere muy pocos recursos.
  • Interpolación con splines: se utilizan polinomios de grado tres en cada subintervalo. Este método es más complejo pero suele dar muy buenos resultados.

Ejercicio

Dados los nodos $x_{0}=-1,$ $x_{1}=1,$ $x_{2}=3$ y $x_{3}=5$ y la función $$f\left(x\right)=\mathrm{sen}\left(\dfrac{\pi}{6}x\right)$$

  • Aproximar el valor en el punto $x=2$ utilizando interpolación lineal a trozos.
  • Calcular una cota de error y compararla con el error.

Aproximar el valor en el punto $x=2$ utilizando interpolación lineal a trozos.

La interpolación lineal a trozos consiste en unir los nodos con segmentos de recta y aproximar el valor de la función con su valor sobre estas rectas.

Queremos aproximar la función en $x=2.$ Primero tenemos que escoger los nodos que usaremos para nuestro segmento de recta. Tomaremos los dos nodos más próximos a este valor que son $1$ y $3.$ A partir de ahora nos olvidamos de los otros nodos y renombramos estos nodos como

$$x_0 = 1 \quad x_1=3$$

El valor de la función en estos nodos es

$$f\left(x\right)=\mathrm{sen}\left(\dfrac{\pi}{6}x\right)\\[0.7cm] y_0=f\left(1\right)=\mathrm{sen}\left(\dfrac{\pi}{6}\right)=\frac{1}{2} \quad y_1=f\left(3\right)=\mathrm{sen}\left(3\dfrac{\pi}{6}\right)=\mathrm{sen}\left(\dfrac{\pi}{2}\right)=1$$

Forma de Lagrange

Podemos interpolar utilizando la forma de Lagrange y entonces el polinomio de interpolación lineal en el intervalo $[1,3]$ tiene la forma

$$P_1(x)=y_0\,L_0(x)+y_1\,L_1(x)$$
$$P_1(x)=y_0\,\frac{x-x_1}{x_0-x_1}+y_1\,\frac{x-x_0}{x_1-x_0}$$
$$P_1(x)=\frac{1}{2}\,\frac{x-3}{1-3}+(1)\,\frac{x-1}{3-1}$$

Y el valor en $x=2$ es

$$P_1(2)=\frac{1}{2}\,\frac{2-3}{1-3}+(1)\,\frac{2-1}{3-1}=\frac{1}{2}\,\left(\frac{-1}{-2}\right)+(1)\,\frac{1}{2}=\frac{1}{4}+\frac{1}{2}=\frac{3}{4}=0.75$$

Forma de Newton

La tabla de diferencias divididas es

$$ \begin{array}{ccc} x & y & \\ 1 & \fbox{$\dfrac{1}{2}$}^{\;\large{c_0}} \\ & & \dfrac{1-\frac{1}{2}}{3-1}=\fbox{$\dfrac{1}{4}$}^{\;\large{c_1}}\\ 3 & 1 & \\ \end{array} $$

Y el polinomio de interpolación en la forma de Newton

$$ P_1\left(x\right)= c_0+c_1\left(x-x_{0}\right)$$
$$ P_1\left(x\right)= \frac{1}{2}+\frac{1}{4}\left(x-1\right)$$

Y el valor en $x=2$ es

$$ P_1\left(2\right)= \frac{1}{2}+\frac{1}{4}\left(2-1\right)=\frac{1}{2}+\frac{1}{4}=\frac{3}{4}=0.75$$

Calcular una cota de error y compararla con el error.

El error de interpolación viene dado por la fórmula

$$ E(x)=f(x)-P_{n}(x)=f^{(n+1)}(c)\dfrac{(x-x_{0})\ldots(x-x_{n})}{(n+1)!} $$

que es la misma que en la interpolación Lagrangiana puesto que si solo consideramos el intervalo $[1,3]$ y que usamos solo dos nodos, es interpolación lagrangiana. Para dos nodos, esta fórmula es

$$ E(x)=f(x)-P_{1}(x)=f''(c)\dfrac{(x-x_{0})(x-x_{1})}{2!} $$

El valor $c$ es desconocido, aunque sabemos que está en el intervalo de interpolación, en nuestro caso $c\in\left(1,3\right)$, y tenemos que encontrar una cota para ese valor. Calculamos la derivada segunda de nuestra función

$$f(x)=\mathrm{sen}\left(\frac{\pi}{6} x\right) \quad f'(x)=\frac{\pi}{6}\,\cos\left(\frac{\pi}{6} x\right) \quad f''(x)=-\frac{\pi^2}{6^2}\,\mathrm{sen}\left(\frac{\pi}{6} x\right)$$

Cuando $c\in(1,3)$ el valor de $$\dfrac{\pi}{6} c\in \left(\dfrac{\pi}{6}(1) , \dfrac{\pi}{6}(3)\right) = \left(\dfrac{\pi}{6} , \dfrac{\pi}{2}\right) = (30^o,90^o)$$

Y como la función seno toma el valor máximo para $90^o$ $$\left|\mathrm{sen}\left(\dfrac{\pi}{6}c\right)\right|\lt 1$$

Entonces $$\left|f''(c)\right|\lt \frac{\pi^2}{6^2}$$

Y por lo tanto podemos dar como cota del error

$$ \left|E(2)\right|\lt\frac{\pi^2}{6^2}\dfrac{\left|(2-1)(2-3)\right|}{2!}=0.13707 $$

Como $f(2)=\mathrm{sen}\left(\dfrac{\pi}{6}(2)\right)=\mathrm{sen}\left(\dfrac{\pi}{3}\right)=0.86603$

$$\mathrm{Error} = |f(2)-P_1(2)|=|0.86603-0.75000|=0.11603\lt 0.13707$$

Vemos que

  • El error es bastante mayor que el obtenido utilizando los cuatro nodos, pero también el procedimiento es mucho más sencillo.
  • Tenemos una buena cota de error, porque es del mismo orden de magnitud que el error.

¿Podemos mejorar este resultado? Sí, aumentando el número de nodos. Por ejemplo, si en lugar de 4 nodos equiespaciados usamos 8 nodos equiespaciados el resultado de la interpolación lineal, gráficamente, será

Comparemos ahora, para el mismo número de nodos, la interpolación con polinomio de grado alto y la interpolación lineal a trozos. Vemos como, en general, es mejor la interpolación lineal a trozos.