Clase 10: Splines

Bibliografía de la Clase:

  • Introduction to Numerical Analysis - J.Stoer, R.Bulirsch. Chapter 2: Interpolation.
  • Guía profesor Luis Salinas

Splines cúbicos

Las funciones splines permiten obtener curvas que tienden a exhibir menos oscilaciones que los polinomios de alto grado.

Si se tiene un conjunto de datos (x_0,y_0),\dots,(x_n,y_n), la idea de los splines es ajustar un polinomio de grado k en cada intervalo de la partición equiespaciada de n+1 datos:

a = x_0 < x_1 < \dots < x_n = b

Por lo tanto, es posible encontrar n funciones splines S_j \quad j = 0,\dots,n-1 que ajusten los intervalos [x_j,x_{j+1}].

La siguiente figura muestra diferentes funciones splines:

(Source code, png, hires.png, pdf)

_images/splines.png

En el caso particular de que estas funciones sean cúbicas (i.e k=3) son conocidas como splines cúbicos.

Splines Cúbicos

Un spline cúbico S:[a,b] \to \mathbb{R} es una función en el intervalo [a,b] que tiene las siguientes propiedades:

  • Dos veces continuamente diferenciable en el intervalo [a,b]
  • S coincide en cada subintervalo [x_j,x_{j+1}], \quad j=0,\dots n-1 con un polinomio de grado 3 S_j.

Por lo tanto, los splines cúbicos son polinomios cúbicos S_j unidos de manera que sus valores S_j(x_j) y sus dos primeras derivadas coinciden en los puntos de apoyo x_j, \quad j=0,\dots,n-1 (ver figura 1).

Splines

Figura 1 Funciones splines

Los splines cúbicos S_j y sus respectivas derivadas son de la forma:

(1)S_j(x)  =& a_j +b_j(x-x_j)+c_j(x-x_j)^2+  d_j(x-x_j)^3

(2)S_j'(x) =&      b_j       +2c_j(x-x_j) + 3d_j(x-x_j)^2

(3)S_j''(x)=&               2c_j        + 6d_j(x-x_j)

Ya que la data se asume equiespaciada, se definirá además:

(4)h=x_{j+1}-x_{j}=\frac{x_n-x_0}{n}

Para poder encontrar el polinomio interpolador S(x) es necesario encontrar todos los coeficientes a_j,b_j,c_j y d_j. Para esto se utilizarán las relaciones que provienen de las propiedades de los splines cúbicos S_j(x) definidos previamente:

1) Interpolación en x_j

\boxed{
S(x_j) = f(x_j) \quad \forall j=0,\dots,n}

De la ecuación (1) se tiene que:

(5)S_j(x_j) = a_j = f(x_j)=y_j

Por lo tanto los valores de a_j se calculan de manera directa.

2) Continuidad de la segunda derivada

\boxed{S''_j(x_{j})=S''_{j-1}(x_{j}) \quad \forall j=1,\dots,n-1}

Usando las ecuaciones (3) y (4) se tiene que:

S''_j(x_{j}) &= S''_{j-1}(x_{j}) \\
2 c_j &=  2 c_{j-1} + 6d_{j-1}(x_j-x_{j-1}) \\
c_j &=  c_{j-1} + d_{j-1} 3h

(6)d_{j-1} =& \frac{c_j - c_{j-1}}{3h}

3) Continuidad de S en x_j

\boxed{S_j(x_{j})=S_{j-1}(x_{j}) \quad \forall j=1,\dots,n-1}

Usando las ecuaciones (1) y (4) se tiene que:

S_j(x_{j}) &= S_{j-1}(x_{j}) \\
a_j &= a_{j-1} +b_{j-1}(x_j-x_{j-1})+c_{j-1}(x_j-x_{j-1})^2+
d_{j-1}(x_j-x_{j-1})^3\\
a_j &= a_{j-1} +b_{j-1} h +c_{j-1}h^2+ d_{j-1}h^3 \\
b_{j-1} &= \frac{1}{h}(a_j-a_{j-1}) - c_{j-1}h -  d_{j-1}h^2

Ahora usando la ecuación (6) para d_{j-1}:

b_{j-1} = \frac{1}{h}(a_j-a_{j-1})-c_{j-1}h -\frac{h}{3}(c_j -c_{j-1})

(7)b_{j-1} = \frac{1}{h}(a_j-a_{j-1})-\frac{h}{3}(c_j+2c_{j-1})

4) Continuidad de la primera derivada

\boxed{S'_j(x_{j})=S'_{j-1}(x_{j}) \quad \forall j=1,\dots,n-1}

Usando las ecuaciones (2) y (4):

S'_j(x_{j}) &= S'_{j-1}(x_{j}) \\
b_j &= b_{j-1} +2c_{j-1}(x_j-x_{j-1}) + 3d_{j-1}(x_j-x_{j-1})^2\\
b_j &= b_{j-1} +2c_{j-1}h + 3d_{j-1}h^2

Ahora usando la ecuación (6) para d_{j-1}:

b_j &= b_{j-1} +2c_{j-1}h + h(c_j - c_{j-1}) \\
b_j &= b_{j-1} + h(c_j + c_{j-1})

Si reemplazamos la ecuación (7) en esta expresión se obtiene el siguiente sistema:

b_j &= b_{j-1} + h(c_j + c_{j-1}) \\
\frac{1}{h}(a_{j+1}-a_j)-\frac{h}{3}(c_{j+1}+2 c_j) &=
\frac{1}{h}(a_j-a_{j-1})-\frac{h}{3}(c_j+2c_{j-1}) + h(c_j +c_{j-1}) \\
a_{j+1}-a_j - \frac{h^2}{3}(c_{j+1}+2 c_j) &=
a_j-a_{j-1}-\frac{h^2}{3}(c_j+2c_{j-1}) + h^2 (c_j + c_{j-1})

(8)c_{j-1}+4c_j+c_{j+1} = \frac{3}{h^2} (a_{j-1} - 2 a_j +
     a_{j+1}) \quad \forall j=1,\dots,n-1

5) Condiciones de borde

Debido a que el sistema presentado en la ecuación (8) sólo tiene n-1 ecuaciones, se necesita definir condiciones de borde para los casos j=0 y j=n. Se tienen dos tipos de condiciones de borde:

  1. Frontera libre o natural

\boxed{S''_0(x_0)=S''_n(x_n)=0}

Si aplicamos la ecuación (3) se tiene que:

S''_0(x_0) = c_0 = 0 \\
S''_n(x_n) = c_n = 0

  1. Frontera fija

\boxed{
S'_0(x_0) = f'(x_0) \quad \text{y} \quad
S'_n(x_n) = f'(x_n)
}

En general, las condiciones de frontera fija son más precisas que las de frontera libre, pero necesitan información acerca de las derivadas en los bordes.

Ejercicio propuesto

Demuestre que para la condición de frontera fija se cumple que b_0 = f'(x_0) y que:

2c_n + c_{n-1} = \frac{3}{h} f'(x_n) - \frac{3}{h^2}(a_n-a_{n-1})

Búsqueda de coeficientes

Luego de obtener las expresiones dadas las restricciones de las funciones splines, lo que queda es ir obteniendo los coeficientes de los polinomios.

De la ecuación (8) se obtienen n-1 ecuaciones lineales que pueden expresarse matricialmente como:

\begin{bmatrix}
1 & 0 & 0 & 0 & 0 & \dots & 0 & 0 & 0 \\
1 & 4 & 1 & 0 & 0 & \dots & 0 & 0 & 0 \\
0 & 1 & 4 & 1 & 0 & \dots & 0 & 0 & 0 \\
0 & 0 & 1 & 4 & 1 & \dots & 0 & 0 & 0 \\
0 & 0 & 0 & 1 & 4 & \dots & 0 & 0 & 0 \\
\vdots&\vdots&\vdots&\vdots&\vdots&\ddots&\vdots&\vdots&\vdots \\
0 & 0 & 0 & 0 & 0 & \dots & 4 & 1 & 0 \\
0 & 0 & 0 & 0 & 0 & \dots & 1 & 4 & 1 \\
0 & 0 & 0 & 0 & 0 & \dots & 0 & 0 & 1
\end{bmatrix}
\begin{bmatrix}
c_0 \\ c_1 \\ c_2 \\ c_3 \\ c_4 \\ \vdots
\\ c_{n-2} \\ c_{n-1} \\ c_{n}
\end{bmatrix}
=
\frac{3}{h^2}
\begin{bmatrix}
0 \\ y_0-2y_1+y_2 \\ y_1-2y_2+y_3 \\ y_2-2y_3+y_4 \\ y_3-2y_4+y_5
\\ \vdots \\
y_{n-3}-2y_{n-2}+y_{n-1} \\  y_{n-2}-2y_{n-1}+y_{n} \\  0
\end{bmatrix}

De este sistema de ecuaciones se obtienen los coeficientes c_j que permiten obtener los coficientes b_j (ecuación (7)) y los d_j (ecuación (6)). Recordar que los a_j están determinados por los valores f(x_j)=y_j.

Ejercicio en clases

Usando fronter libre determine el spline cúbico S que interpola la data f(0)=0,f(1)=1,f(2)=2

Ejercicio propuesto

Un spline cúbico S definido en el intervalor [0,2] se define como:

S(x) = \left\{
       \begin{array}{ll}
       S_0(x) = 1 +2x -x^3 & \mathrm{si\ } 0 \leq x \leq 1\\
       S_1(x) = 2 + b(x-1) + c(x-1)^2 + d(x-1)^3 )&
       \mathrm{si\ } 1 \leq x \leq 2\\
       \end{array}
       \right.

Determine los coeficientes b, c y d considerando condiciones de frontera libre.