Documentos de Académico
Documentos de Profesional
Documentos de Cultura
yacerque@gmail.com
SPLINES CBICOS
DEFINICIN
FUNCIONES SPLINES DE GRADO 1
FUNCIONES SPLINES DE GRADO 2
FUNCIONES SPLINES CUBICOS
Ejemplo Spline Cbico
Un caso particular
El caso general
Solucin Con MatLab
Ejercicios
1 de 24
S 0 ( x) = c 0 ....x (t 0 , t1 )
S ( x) = c ....x (t , t )
1
1
2
S ( x) = 1
....
S n 1 ( x) = c n 1 ....x (t n 1 , t n )
Los intervalos (ti-1,ti) (xi-1,xi) no se intersectan entre s, por lo que no hay ambigedad
en la definicin de la funcin en los nodos.
x x0 x1 x2 ..... xn
y y0 y1 y2 .... yn
Una funcin spline de grado 1 que interpole los datos es simplemente unir cada uno de los
puntos (Par coordenados) mediante segmentos de recta, como se ilustra en las siguientes
figuras:
Fig 2
2 de 24
Claramente esta funcin cumple con las condiciones de la spline de grado 1. As, se tiene
que para este caso:
S 0 ( x) = a0 x + b0 ....x (t 0 , t1 )
S ( x) = a x + b ....x (t , t )
1
1
1
1 2
S ( x) =
....
S n1 ( x) = an 1 x + bn 1 ....x (t n 1 , t n )
S 0 ( x) = a0 x + b0 ....x ( x0 , x1 )
S ( x) = a x + b ....x ( x , x )
1
1
1
1
2
S ( x) =
....
S n 1 ( x) = an 1 x + bn1 ....x ( xn 1 , xn )
Donde:
s(x) =
y 0 + f [x1 , x 2 ]( x x 0 ) si x [x 0 , x1 ]
y1 + f [x 2 , x1 ]( x x1 ) si x [x1 , x 2 ]
y n 1 + f [x n , x n 1 ]( x x n 1 ) si x [x n 1 , x n ]
x 3 4.5 7 9
y 2.5 1 2.50.5
Proceda a calcular la interpolacin por splines de grado 2. Primero que nada, observe que
se forman tres intervalos en los datos sobre el eje x:
[3,4.5]
[4.5,7]
[7,9]
3 de 24
Para cada uno de los tres (3) intervalos, se debe definir una funcin polinomial de grado 2,
tal como se ilustra a continuacin:
s(x) =
a1 x 2 + b1 x + c1 si x [3,4.5]
a 2 x 2 + b2 x + c 2 si x [4.5,7 ]
a3 x 2 + b3 x + c3 si x [7,9]
Vale la pena aclarar que la ecuacin a1 x 2 + b1 x + c1 , une los puntos cuyas coordenadas estn
dadas por (3,2.5) y (4.5,1), la ecuacin a 2 x 2 + b2 x + c 2 , une los puntos cuyas coordenadas
estn dadas por (4.5,1) y (7,2.5), y la ecuacin a3 x 2 + b3 x + c3 los puntos cuyas coordenadas
estn dadas por (7,2.5) y (9,0.5). En conclusin siendo 4 par coordenados se unen estos
mediante tres ecuaciones polinomiales de orden 2.
Para resolver el problema, primero, se hace que el spline pase por los puntos de la tabla de
datos (por cada par coordenado). Es decir, se debe cumplir que:
s(3)=2.5, s(4.5)=1, s(7)=2.5 y s(9)=0.5
Teniendo en cuenta lo anterior, se forman las siguientes ecuaciones:
{
{
s(3) =2.5
S(4.5)=1
{
{
S(7)=2.5
S(9)=0.5
}
}
}
}
Ec 1
Ec 2
Ec 3
Ec 4
Ec 5
Ec 6
Hasta aqu, se tiene un total de 6 ecuaciones vs. 9 incgnitas. El siguiente paso es manejar
la existencia de las derivadas continuas. En el caso de los splines de grado 2, se necesita
que el spline tenga derivada continua de orden k-1=1, es decir, primera derivada continua.
Se calcula primero la primera derivada:
S(x) =
2a1 x + b1 si x [3,4.5]
2a 2 x + b2 si x [4.5,7 ]
2a3 x + b3 si x [7,9]
Se observa que las derivadas anteriores, estn formadas por segmentos de rectas, que
pudieran presentar discontinuidad en los cambios de intervalo. Es decir, las posibles
discontinuidades se daran en x=4.5 y x=7.0 Por lo tanto para que s'(x) sea continua, se
debe cumplir que: 2a1(4.5)+b1=2a2(4.5)+b2, siendo igual a:
S(4.5)
9a1+b1=9a2+b2
Ec 7
14a2+b2=14a3+b3
Ec 8
4 de 24
3b1 + c1 = 2.5
4.5b1 + c1 = 1
20.25a 2 + 4.5b2 + c 2 = 1
49a 2 + 7b2 + c 2 = 2.5
49a3 + 7b3 + c3 = 2.5
81a3 + 9b3 + c3 = 0.5
b1 9a 2 b2 = 0
14a 2 + b2 14a3 b3 = 0
Ec 1
Ec 2
Ec 3
Ec 4
Ec 5
Ec 6
Ec 7
Ec 8
3
4.5
0
0
0
0
1
0
1
1
0
0
0
0
0
0
0
0
20.25
49
0
0
-9
14
0
0
4.5
7
0
0
-1
1
0
0 0
0
0 0
1
0 0
1
0 0
0 49 7
0 81 7
0
0 0
0 -14 -1
0
0
0
0
1
1
0
0
b1
c1
a2
b2
c2
a3
b3
c3
2.5
1
1
2.5
2.5
0.5
0
0
-1.0000
5.5000
0.6400
-6.7600
18.4600
-1.6000
24.6000
-91.3000
5 de 24
b1
-1
c1
5.5
a2 0.64
b2 -6.76
c2 18.46
a3 -1.6
b3 24.6
c3 -91.3
Sustituyendo estos valores (junto con a1=0), se obtiene la funcin spline cuadrtica que
interpola la tabla de datos dada:
s(x) =
x + 5.5
si
si
si
x [3,4.5]
x [4.5,7]
x [7,9]
La Figura 4, contiene tanto los puntos iniciales de la tabla de datos, as como el spline
cuadrtico. Esta grfica se gener usando Mathematica.
Fig 4
6 de 24
Fig. 5
Fig. 6
S 0 ( x)....x (t 0 , t1 )
S ( x)....x (t , t )
1 2
S ( x) = 1
....
S n 1 ( x)...x (t n1 , t n )
Los polinomios Si-1 y Si interpolan el mismo valor en el punto ti, es decir, se cumple:
Si-1(ti) = yi = Si(ti) 1 i n 1
7 de 24
Por lo que se garantiza que S es continuo en todo el intervalo. Adems, se supone que S' y
S'' son continuas, condicin que se emplea en la deduccin de una expresin para la funcin
del spline cbico.
Aplicando las condiciones de continuidad del spline S y de las derivadas primera S' y
segunda S'', es posible encontrar la expresin analtica del spline. No vamos a obtener esta
expresin, ya que su demostracin queda fuera del mbito de estos apuntes. Simplemente
se dir que la expresin resultante es:
S i ( x) =
zi
z
y
z h
y zh
(ti +1 x) 3 + i +1 ( x t i ) 3 + ( i +1 + i +1 i )( x ti ) + ( i i i )(t i +1 x)
6hi
6hi
hi
6
hi
6
hi 1 zi 1 + 2(hi + hi 1 ) zi + hi zi +1 =
6
6
( yi +1 yi )
( yi yi 1 )
hi 1
hi 1
La ecuacin anterior, con i=1,2,....,n-1 genera un sistema de n-1 ecuaciones lineales con
n+1 incgnitas z0,z1,...,zn. Se puede elegir z0 y z1 de forma arbitraria y resolver el
sistema de ecuaciones resultante para obtener los valores de z1,z2,...,zn-1. Una eleccin
especialmente adecuada es hacer z0=z1=0. La funcin spline resultante se denomina spline
cbico natural y el sistema de ecuaciones lineal expresado en forma matricial es:
u1 h1
h1 u2
h2
h2
u3
h3
hn2
z1 v1
z
v
2 2
z = v
3 3
En donde:
hi = t i +1 ti
hi21
ui = 2(hi + hi 1 )
ui 1
6
bi = ( yi +1 yi )
hi
h v
vi = bi bi 1 i 1 i 1
ui 1
Algoritmo para encontrar los coeficientes zi de un spline cbico.
Input n,ti,yi
for i=0,1,,n-1 do
Universidad Surcolombiana Neiva Huila Colombia
8 de 24
hi=ti+1-ti
bi=6(yi+1-yi)/hi
end
U1=2(ho+h1)
V1=b1-b0
for i=2,3,,n-1 do
ui=2(hi+hi-1)-h2i-1/ui-1
vi=bi-bi-1-hi-1vi-1/ui-1
end
zn=0
for i=n-1,n-1,...,1 do
zi=)vi-hizi+1)/ui
end
zo=0
output zi
Este sistema de ecuaciones, que es tridiagonal, se puede resolver mediante eliminacin
gaussiana sin pivoteo. El cdigo acepta como entrada un conjunto de nodos (ti) y el
conjunto de los valores de la funcin correspondiente (yi) y produce un vector con los
vectores zi. Por ltimo, el valor del spline S en un punto x cualquiera interpolado se puede
calcular de forma eficiente empleando la siguiente expresin:
S i ( x) = yi + ( x ti )[Ci + ( x ti )[Bi + ( x ti ) Ai ]]
En donde: Ai =
h
h
1
1
z
( zi +1 zi ) , Bi = i , C = i zi +1 i zi + ( yi +1 yi )
2
6
3
hi
6hi
Se muestra un ejemplo para ilustrar el empleo de los splines cbicos para interpolar los
valores de una tabla. En la tabla 1 se muestran algunos valores de una serie de valores
tabulados a intervalos regulares de la funcin f ( x) = x en el intervalo [0,2.25]. Tambin
se indican los valores interpolados empleando el correspondiente spline cbico as como el
error absoluto cometido. Obsrvese que el error es cero para los nudos. En la figura 7 se
representan grficamente los valores tabulados.
Tabla 1: Valores interpolados mediante un spline cbico para la
funcin N+1 e indicacin del error cometido (en valor absoluto).
Si(x)
a (x)
0.1426 1.0732E-01
0.1250
0.2782 7.5266E-02
0.1875
0.3997 3.3261E-02
0.5744 1.5440E-02
0.3750
0.6285 1.6155E-02
0.4375
0.6701 8.6732E-03
9 de 24
1.3462 6.8994E-07
1.8750
1.3693 5.9953E-06
1.9375
1.3919 8.7004E-06
1.4361 2.4522E-05
2.1250
1.4577 4.7329E-05
2.1875
1.4790 4.6215E-05
x +1
en el intervalo [0,7].
x=0:0.5:7;
y=exp(x+1);
xx = 0:.25:7;
yy = spline(x,y,xx);
plot(x,y,'o',xx,yy)
xlabel('0 < x < 7')
ylabel('exp(x+1)')
title('Funcion exp(x+1)')
x +1
10 de 24
Figure 8: Representacin de la funcin y=sin(x). Los crculos representan los valores tabulados
de la funcin y la lnea continua los puntos interpolados mediante una funcin spline cbica.
x x0 x1 x2 ..... xn
y y0 y1 y2 .... yn
Un Spline cbico que interpola estos datos, es una funcin s(x) definida como sigue:
s0 ( x) si x [ x0 , x1 ]
s ( x) si x [ x , x ]
1
2
s( x) = 1
...
s n1 ( x) si x [ xn1 , xn ]
Donde cada si(x) es un polinomio cbico; si(xi)=yi, para toda i=0,1,....,n y tal que s(x)
tiene primera y segunda derivadas continuas en (xo,xn)
Universidad Surcolombiana Neiva Huila Colombia
11 de 24
-1
-7
Solucin: Se define un polinomio cbico en cada uno de los intervalos que se forman:
A continuacin, Se busca que se cumpla la condicin de que la spline debe pasar por los
puntos dados en la tabla, o sea s(x)=y, as, se tiene que:
s(2) = -1
8a1+ 4b1+2c1+d1 = -1
27a1+ 9b1+3c1+d1 = 2
s(3)
27a2+ 9b2+3c2+d2 = 2
= 2
s(5) = -7 125a2+25b2+5c2+d2 = -7
Ec 1
Ec 2
Ec 3
Ec 4
s'(x)=
3a1x2+2b1x+c1
3a2x2+2b2x+c2
si x [2,3]
si x [3,5]
Al igual que en el caso de los splines cuadrticos, se presentan ecuaciones que pueden
tener discontinuidad en los cambios de intervalo; las posibles discontinuidades son los
puntos donde se cambia de intervalo, en este caso x=3. Para evitar esta discontinuidad, se
evala en x=3 los dos polinomios y se igualan de la siguiente manera: 3a1(3)2+2b1(3)+c1=
3a2(3)2+2b2(3)+c2. Siendo igual a:
27a1+6b1+c1=27a2+6b2+c2 Ec 5
De la misma manera se procede con la segunda derivada:
s''(x)
=
6a1x+2b1
si x [2,3]
6a2x+2b2
si x [3,5]
En este punto se cuenta con 6 ecuaciones y 8 incgnitas, por lo tanto se tienen 2 grados
de libertad; en general, se agregan las siguientes 2 condiciones:
s''(xo)=0
s''(xn)=0
De lo cual se obtiene:
8a1+ 4b1+2c1+d1
Universidad Surcolombiana Neiva Huila Colombia
= -1
12 de 24
27a1+ 9b1+3c1+d1
27a2+ 9b2+3c2+d2
125a2+25b2+5c2+d2
-27a2 - 6b2 - c2
-18a2 - 2b2
27a1+6b1+c1
18a1+2b1
12a1+2b1
30a2+ 2b2
= 2
= 2
= -7
= 0
=0
=0
=0
8
27
0
0
27
18
12
0
4
9
0
0
6
2
2
0
2
3
0
0
1
0
0
0
1
0
1
0
0 27
0 125
0 -27
0 -18
0
0
0
30
0 0 0 a1
0 0 0 b1
9 3 1 c1
25 5 1 d1
-6 -1 0 a2
-2 0 0 b2
0 0 0 c2
2 0 0 d2
-1
2
2
-7
0
0
0
0
13 de 24
Fig. 9
Si se agregan las siguientes dos lneas para realizarlo directamente con la funcin spline del
matlab se tendr la siguiente figura:
xx=0:0.1:6;
Int1=interp1(Xi,Yi,xx,spline);
plot(xx,Int1,r);
Fig. 10
a1
b1
c1
d1
a2
b2
c2
d2
= -1.250
=
7.500
= -10.750
=
0.500
=
0.625
= -9.375
= 39.875
= -50.125
14 de 24
Sustituyendo estos valores en la funcin inicial, se ve que el spline cbico para la tabla de
datos dada, queda definida como sigue:
3
2
0.625 x 9.375 x + 39.875 x 50.125 si x [3,5]
Se muestra la grfica correspondiente a este ejercicio, creada tambin en Mathematica.
Fig. 11
Obsrvese la finura con la que se unen los polinomios cbicos que conforman el spline.
Prcticamente ni se nota que se trata de dos polinomios diferentes!. Esto es debido a las
condiciones que se impusieron sobre las derivadas de la funcin. Esta finura casi artstica,
es la que permite aplicar los splines cbicos, para cuestiones como el diseo de letras por
computadoras, o bien a problemas de aplicacin donde la interpolacin que se necesita es
de un caracter bastante delicado, como podra tratarse de datos mdicos sobre algn tipo
de enfermedad.
Ejemplo 4: Interpolar los siguientes datos utilizando splines cbicos:
x -1 1 2 4
y -1 1 5 -2
Solucin: Nuevamente, se define un polinomio cbico en cada uno de los intervalos:
a1 x 3 + b1 x 2 + c1 x + d 1 , si x [ 1,1]
S ( x) = a2 x 3 + b2 x 2 + c2 x + d 2 , si x [1,2]
a x 3 + b x 2 + c x + d , si x [2,4]
3
3
3
3
Despus, se hace que el Spline pase por los puntos dados en la tabla. As, se tiene que:
s(-1)= -1 implica que, a1 + b1 c1 + d1 = 1
s(1)=1 implica que, a1 + b1 + c1 + d1 = 1 , a2 + b2 + c2 + d 2 = 1
s(2)=5 implica que, 8a2 + 4b2 + 2c2 + d 2 = 5 , 8a3 + 4b3 + 2c3 + d 3 = 5
Y finalmente s(4)= -2 implica que, 64a3 + 16b3 + 4c3 + d 3 = 2
15 de 24
2
3a3 x + 2b3 x + c3 , si x [2,4]
Se nota entonces, que las posibles discontinuidades de s'(x) son x=1 y x=2. Por lo tanto,
para hacer que s'(x) sea continua, se igualan las ecuaciones correspondientes en ambos
valores:
Nuevamente, las posibles discontinuidades se podran dar en los puntos x=1 y x=2. Por lo
tanto, para que s''(x) sea continua, se igualan las ecuaciones en ambos valores:
16 de 24
1
1
0
0
0
3
0
3
3
0
1 1 1 0 0 0 0 0 0 0 0 a1 1
1 1 1 0 0 0 0 0 0 0 0 b1 1
0 0 0 1 1 1 1 0 0 0 0 c1 1
0 0 0 8 4 2 1 0 0 0 0 d1 5
0 0 0 0 0 0 0 8 4 0 1 a 2 5
0 0 0 0 0 0 0 64 16 4 1 b2 2
=
2 1 0 3 2 1 0 0 0 0 0 c 2 0
0 0 0 12 4 1 0 12 4 1 0 d 2 0
1 0 0 3 1 0 0 0 0 0 0 a3 0
0 0 0 6 1 0 0 6 1 0 0 b3 0
1 0 0 0 0 0 0 0 0 0 0 c3 0
0 0 0 0 0 0 0 12 1 0 0 d 3 0
, a = 21 , a3 = 24
a1 = 51
140 2
10
35
, b = 297 , b3 = 288
b1 = 153
140 2
35
35
,
,
,
17 de 24
Fig. 12
Un caso particular
Se ilustra un proceso de construccin con el ejemplo siguiente, en el cual se trata de hallar
el trazador cbico para los puntos:
( x 0 , y 0 ) = (1,2),
Fig. 13
Como puede observarse, es necesario construir el trazador S(x) que se define como So(x)
en el intervalo [1,3], como S1(x) en el intervalo [3,4] y como S2(x) en el intervalo [4,6],
donde
18 de 24
1. Continuidad.
En primer lugar, se pide que So(x) coincida con S1(x) en x1. Adems, S1(x) debe
coincidir con S2(x) en x2. Estas dos condiciones, junto a la definicin que se hizo
antes de que a3 = S 2 ( x3 ) conducir a las tres ecuaciones:
Ec 1
'
'
'
b j +1 = b j + c j h j + 3d j h 2j , para j=0,1,2 Ec 2
4. Coincidencia en concavidad.
Calculando la segunda derivada de cada uno de los polinomios S j ( x) :
S "j ( x) = 2c j + 6d j ( x x j ) Para j=0,1,2
"
"
"
Ec 3
5. Despejando d j de la ecuacin 3 se obtiene:
Ec 4
6. sustituyendo d j en 1 y en 2 se obtienen las relaciones 5 y 6:
a j +1 = a j + b j h j +
b j +1
h 2j
(2c j + c j +1 ) , j=0,1,2
3
= b j + (c j + c j 1 )h j , j=0,1,2
Ec 5
Ec 6
7. Despejando b j de la ecuacin 5
Ec 7
8. y haciendo un corrimiento de ndices, se obtiene:
19 de 24
Ec 8
9. De igual forma, en la ecuacin 6 se hace un corrimiento de ndices para obtener
b j = b j 1 + (c j 1 + c j )h j 1 , j=1,2,3 Ec 9
10. Al sustituir en esta ltima ecuacin la expresin para bj obtenida en Ec7 y en Ec8, y
haciendo las simplificaciones del caso se obtiene el sistema de ecuaciones:
11. h j 1c j 1 + 2(h j 1 + h j )c j + h j c j +1 =
3
3
(a j +1 a j )
(a j a j 1 ) , para j=1,2
hj
h j 1
20 de 24
b0 = 1.7142857
De la ecuacin 7 se obtiene: b1 = 0.4285714
b = 1.0714285
2
2
3
S ( x) = S1 ( x) = 4 0.4285714( x 3) 1.0714286( x 3) + 0.5( x 3)
si x [3,4]
2
3
S 2 ( x) = 3 1.0714285( x 4) + 0.4285714( x 4) 0.0714857( x 4) si x [4,6]
Fig. 14
El caso general
Para un conjunto de N+1 puntos ( x , y 0 ), ( x1 , y1 ), ( x 2 , y 2 ),..., ( x n , y n ) , en el proceso de
construccin del trazador cbico, se buscan los coeficientes a j , b j , c j y d j , que cumplan
las siguientes relaciones:
1. S j ( x) = a j + b j ( x x j ) + c j ( x x j ) 2 + d j ( x x j ) 3 , para j=0,1,2,n-1
1
(c j +1 c j ) , para j=0,1,2,n-1
3h j
5. b j =
hj
1
(a j +1 a j ) (2c j + c j +1 ) , para j=0,1,2,n-1
hj
3
21 de 24
h j = x j +1 x j
aj = yj
2.
an = y n
j =
4.
3 a j +1h j 1 a j (h j + h j 1 ) + a j 1h j
h j 1h j
Se define
io = 1 , 0 = 0 , z 0 = 0 , in = 1 , z n = 0 , cn = 0
5. Para j = 1,2,..., n 1 se define
li = 2(hi + hi 1 ) hi 1 i 1
i = hi / li
zi = ( i hi 1 zi 1 ) / li
c j = z j j c j +1
bj = (a j +1 a j ) / hj hj (c j +1 + 2c j ) / 3
d j = (c j +1 c j ) /(3h j )
Prctica con MATLAB
En primer lugar se espera que el usuario resuelva el sistema de ecuaciones lineales con el
que se concluy la seccin introductoria y use los comandos especficos de MATLAB para su
solucin.
En efecto, se puede seguir la siguiente secuencia de instrucciones para determinar la
solucin del sistema.
A=[
22 de 24
5.4372
1.4387 -2.7481
5.4372
23 de 24
Fig. 15
24 de 24