Página web del curso

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)$$ Si escribimos el spline cúbico natural que los ajusta como $$s(x)=\begin{cases} s_{1}(x)=a\,(x+1)^{3}+b\,(x+1)^{2}+c\,(x+1)+d & \mathrm{si\;}x\in\left[-1,1\right]\\ s_{2}(x)=e\,(x-1)^{3}+f\,(x-1)^{2}+g\,(x-1)+h & \mathrm{si\;}x\in\left[1,3\right]\\ s_{3}(x)=i\,(x-3)^{3}+j\,(x-3)^{2}+k\,(x-3)+l & \mathrm{si\;}x\in\left[3,5\right] \end{cases}$$

  • Calcular los coeficientes de los polinomios.
  • Calcular el valor de la spline en el punto $x=2.$

Calcular los coeficientes de los polinomios

Para calcular el spline necesitamos los valores de la función en los nodos

$$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(1\right)=\mathrm{sen}\left(\dfrac{\pi}{6}\right)=\frac{1}{2}\\[0.7cm] y_2=f\left(3\right)=\mathrm{sen}\left(3\dfrac{\pi}{6}\right)=\mathrm{sen}\left(\dfrac{\pi}{2}\right)=1\quad y_3=f\left(5\right)=\mathrm{sen}\left(\dfrac{5\pi}{6}\right)=\frac{1}{2}$$
\begin{array}{|l|cccc|} \hline k & 0 & 1 & 2 & 3\\ \hline x & -1 & 1 & 3 & 5\\ \hline y &-\dfrac{1}{2} & \dfrac{1}{2} & 1 & \dfrac{1}{2}\\ \hline \end{array}

Se tienen que cumplir las siguientes condiciones:

  • La curva ha de pasar por los tres puntos. Por lo tanto: $$ s_{1}(-1)=-\dfrac{1}{2},\;s_{1}(1)=\dfrac{1}{2},\;s_{2}(1)=\dfrac{1}{2},\;s_{2}(3)=1,\;s_{3}(3)=1,\;s_{3}(5)=1/2. $$

  • Han de coincidir las derivadas primera y segunda en los puntos intermedios:$$ s'_{1}(1)=s'_{2}(1),\;s'_{2}(3)=s'_{3}(3),\; s''_{1}(1)=s''_{2}(1),\;s''_{2}(3)=s''_{3}(3) $$

  • Y como hay 12 incógnitas y de momento sólo tenemos 10 condiciones (ecuaciones) imponemos dos más en los extremos. Como el spline es natural las condiciones adicionales son:$$ s''_{1}(-1)=0,\;s''_{3}(5)=0. $$

Tenemos

$$s(x)=\begin{cases} s_{1}(x)=a\,(x+1)^{3}+b\,(x+1)^{2}+c\,(x+1)+d & \mathrm{si\;}x\in\left[-1,1\right]\\ s_{2}(x)=e\,(x-1)^{3}+f\,(x-1)^{2}+g\,(x-1)+h & \mathrm{si\;}x\in\left[1,3\right]\\ s_{3}(x)=i\,(x-3)^{3}+j\,(x-3)^{2}+k\,(x-3)+l & \mathrm{si\;}x\in\left[3,5\right] \end{cases}$$

Calculamos las derivadas primeras

$$ s'(x)=\begin{cases} s'_{1}(x)=3a\;(x+1)^{2}+2b\;(x+1)+c & \mathrm{si\;}x\in\left[-1,1\right]\\ s'_{2}(x)=3e\left(x-1\right)^{2}+2f\left(x-1\right)+g & \mathrm{si\;}x\in\left[1,3\right]\\ s'_{3}(x)=3i\left(x-3\right)^{2}+2j\left(x-3\right)+k & \mathrm{si\;}x\in\left[3,5\right] \end{cases} $$

y segundas

$$ s''(x)=\begin{cases} s''_{1}(x)=6a\;(x+1)+2b & \mathrm{si\;}x\in\left[-1,1\right]\\ s''_{2}(x)=6e\left(x-1\right)+2f & \mathrm{si\;}x\in\left[1,3\right]\\ s''_{3}(x)=6i\left(x-3\right)+2j & \mathrm{si\;}x\in\left[3,5\right] \end{cases} $$

y las ecuaciones son:

$$\begin{array}{|l|c|c|} \hline 1 & s_{1}(-1)=-\dfrac{1}{2} & d=-\dfrac{1}{2}\\ 2 & s_{1}(1)=\dfrac{1}{2} & 8a + 4b + 2c + d=\dfrac{1}{2}\\ 3 & s_{2}(1)=\dfrac{1}{2} & h=\dfrac{1}{2}\\ 4 & s_{2}(3)=1 & 8e+4f+2g+h=1\\ 5 & s_{3}(3)=1 & l=1\\ 6 & s_{3}(5)=\dfrac{1}{2}& 8i + 4j + 2k + l=\dfrac{1}{2}\\ \hline 7 & s'_{1}(1)=s'_{2}(1)& 12 a + 4 b + c = g\\ 8 & s'_{2}(3)=s'_{3}(3) & 12 e + 4 f + g = k\\ \hline 9 & s''_{1}(1)=s''_{2}(1)& 12 a + 2 b = 2 f\\ 10 & s''_{2}(3)=s''_{3}(3)& 12 e + 2 f = 2 j\\ \hline 11 & s''_{1}(-1)=0& 2b=0\\ 12 & s''_{3}(5)=0& 12 i + 2 j = 0\\ \hline \end{array}$$

Y tenemos un sistema lineal de 12 ecuaciones para calcular 12 incógnitas, que expresado en forma matricial es

$$ \left(\begin{array}{rcrccrrccrrc} 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\ 8 & 4 & 2 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0\\ 0 & 0 & 0 & 0 & 8 & 4 & 2 & 1 & 0 & 0 & 0 & 0\\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1\\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 8 & 4 & 2 & 1\\ 12 & 4 & 1 & 0 & 0 & 0 & -1 & 0 & 0 & 0 & 0 & 0\\ 0 & 0 & 0 & 0 & 12 & 4 & 1 & 0 & 0 & 0 & -1 & 0\\ 12 & 2 & 0 & 0 & 0 & -2 & 0 & 0 & 0 & 0 & 0 & 0\\ 0 & 0 & 0 & 0 & 12 & 2 & 0 & 0 & 0 & -2 & 0 & 0\\ 0 & 2 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 12 & 2 & 0 & 0 \end{array}\right)\left(\begin{array}{c} a\\ b\\ c\\ d\\ e\\ f\\ g\\ h\\ i\\ j\\ k\\ l \end{array}\right)=\left(\begin{array}{c} -1/2\\ 1/2\\ 1/2\\ 1\\ 1\\ 1/2\\ 0\\ 0\\ 0\\ 0\\ 0\\ 0 \end{array}\right) $$

La solución de este sistema es $a=-1/120$, $b=0$, $c=8/15$, $d=-1/2$, $e=-1/48$, $f=-1/20$, $g=13/30$, $h=1/2$, $i=7/240$, $j=-7/40$, $k=-1/60$ y $l=1$. Por lo tanto la spline cúbica es

$$s(x)=\begin{cases} s_{1}(x)=-\dfrac{1}{120}\,(x+1)^{3}+\dfrac{8}{15}\,(x+1)-\dfrac{1}{2} & \mathrm{si\;}x\in\left[-1,1\right]\\ s_{2}(x)=-\dfrac{1}{48}\,(x-1)^{3}-\dfrac{1}{20}\,(x-1)^{2}+\dfrac{13}{30}\,(x-1)+\dfrac{1}{2} & \mathrm{si\;}x\in\left[1,3\right]\\ s_{3}(x)=\dfrac{7}{240}\,(x-3)^{3}-\dfrac{7}{40}\,(x-3)^{2}-\dfrac{1}{60}\,(x-3)+1 & \mathrm{si\;}x\in\left[3,5\right] \end{cases}$$

Este es un ejemplo de qué es una spline cúbica, no es un ejemplo de algoritmo eficaz de construción del spline. En el algoritmo usual, la forma de los polinomios de grado 3 en cada subintervalo es distinta de la que se ha dado y busca que el sistema lineal sea tridiagonal, es decir que la matriz de coeficientes solo tiene elementos en tres diagonales: la principal, la que está por encima de la diagonal principal y la que está por debajo. Los sistemas tridiagonales tienen algoritmos específicos de almacenamiento y resolución más sencillos que los de matriz llena.

Independientemente del número de nodos, al construir una spline cúbica siempre faltan dos ecuaciones. Se necesitan dos ecuaciones adicionales que se suelen aplicar a los nodos de los bordes del intervalo y por ello se habla de condiciones de contorno. Dependiendo de ellas la spline se llama

  • Natural: $s_1''(x_0)=0$ y $s_n''(x_n)=0$
  • Sujeta: $s_1'(x_0)=y'_0$ y $s_n'(x_n)=y'_n$
  • Periódica: Se tiene que verificar que $s_1(x_0)=s_n(x_n)$ y se impone que $s_1'(x_0)=s_n'(x_n)$ y $s_1''(x_0)=s_n''(x_n)$

Calcular el valor de la spline en el punto $x=2$

Como el punto $2$ está en el intervalo $[1,3]$ utilizaremos el polinomio

$$s_{2}(x)=-\dfrac{1}{48}\,(x-1)^{3}-\dfrac{1}{20}\,(x-1)^{2}+\dfrac{13}{30}\,(x-1)+\dfrac{1}{2} $$
$$s(2)=s_{2}(2)=-\dfrac{1}{48}\,(2-1)^{3}-\dfrac{1}{20}\,(2-1)^{2}+\dfrac{13}{30}\,(2-1)+\dfrac{1}{2}=-\dfrac{1}{48}-\dfrac{1}{20}+\dfrac{13}{30}+\dfrac{1}{2}=0.8625$$

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

$$\mathrm{Error} = |f(2)-s(2)|=|0.86603-0.86250|=0.00353$$

Y vemos que con el mismo número de nodos, en este caso, el error es menor que para el polinomio de interpolación de Lagrange con 4 nodos.

Comparemos también el resultado para una función donde la interpolación de Lagrange falla porque el grado del polinomio es muy alto y el polinomio interpolatorio oscila.