Está en la página 1de 13

Interpolación por splines

Una serie de valores

( x 0 , y 0 ) , ( x 1 , y 1 ) , ( x 2 , y 2 ) , , , ,, , , , , ( x N , y N )
N puntos

Entre cada pareja de puntos vamos a interpolar utilizando una función cúbica

Entre estos dos puntos ( x 0 , y 0 ) , ( x 1 , y 1 )

Se tendría una función cúbica de interpolación.


2 3
y=a+bx +c x +d x
No se plantearía así de esta forma exactamente, sino que sería de esta otra forma

y= y 0 f 0 ( x ) + y 1 f 1 ( x ) + y 0 ' g0 ( x )+ y1 ' g1 ( x )

f 0 ( x ) , f 1 ( x ) , g0 ( x ) , g 1 ( x ) es una funcion cubica

En esta interpolación se está incluyendo las pendientes de la curva a interpolar, a pesar de no


tenerlas como dato.

En esta interpolación las pendientes es un resultado del cálculo.

Para la ecuación

y= y 0 f 0 ( x ) + y 1 f 1 ( x ) + y 0 ' g0 ( x )+ y1 ' g1 ( x )

Se tendría que
2 3
f 0 ( x )=1−3 x +2 x

2 3
f 1 ( x )=3 x −2 x
2 3
g0 ( x )=x−2 x + x
2 3
g1 ( x ) =−x + x

Una fórmula de interpolación

y= y 0 f 0 ( x ) + y 1 f 1 ( x ) + y 0 ' g0 ( x )+ y1 ' g1 ( x )

Pensando que los datos están distribuidos como x=0,1,2,3 , , ,

Pero si se puede hacer la adaptación en el caso en que los datos no estén distribuidos de esta
forma.

Se tiene continuidad en los valores de “y” y en los valores “ y’ “ en los puntos donde coinciden los
splines

Lo que se buscaría para determinar los valores de las pendientes en el spline es que también se
tenga continuidad en los valores de “ y’’ “.

Entonces en las funciones.


2 3
f 0 ( x )=1−3 x +2 x

f 1 ( x )=3 x 2−2 x3

g0 ( x )=x−2 x2 + x 3
2 3
g1 ( x ) =−x + x
Sus derivadas serian:

2
f 0 ' ( x )=−6 x+6 x
2
f 1 ' ( x )=6 x−6 x
2
g0 ' ( x )=1−4 x+ 3 x
2
g1 ' ( x ) =−2 x +3 x

Las segundas derivadas serian:

f 0 ' ' ( x )=−6+12 x

f 1 ' ' ( x )=6−12 x

g0 ' ' ( x )=−4+6 x

g1 ' ' ( x ) =−2+6 x

Entonces para un tramo localizado entre x 0=0 x 1=1

Se tendría que la segunda derivada en x 1=1

f 0 ' '=6

f 1 ' '=−6

g0 ' '=2

g1 ' '=4

La segunda derivada en x 1=1 evaluada con el spline del tramo (0<x<1)


'' '
y =6 y 0−6 y 1 +2 y 0 +4 y 1 '

Entonces para un tramo localizado entre x 1=1 x 2=2

Para este conjunto de ecuaciones

f 0 ' ' ( x )=−6+12 x

f 1 ' ' ( x )=6−12 x

g0 ' ' ( x )=−4+6 x


g1 ' ' ( x ) =−2+6 x

Cuando se derivaron se puso como condiciones que el spline se localizaba entre 0 y 1.

En el caso en que el tramo esta entre 1 y 2, aquí lo que se tiene es que el origen esta desplazado, si
queremos poner estas ecuaciones en el mismo origen del sistema de coordenadas se tendría que:

f 0 ' ' ( x )=−6+12 ( x−1 )

f 1 ' ' ( x )=6−12 ( x−1 )

g0 ' ' ( x )=−4+6 ( x−1 )

g1 ' ' ( x ) =−2+6 ( x−1 )

Para este tramo las ecuaciones serian


2 3
f 0 ( x )=1−3 ( x−1 ) + 2 ( x−1 )

f 1 ( x )=3 ( x−1 )2−2 ( x−1 )3


2 3
g0 ( x )=( x−1 )−2 ( x−1 ) + ( x−1 )

g1 ( x ) =−( x−1 )2+ ( x−1 )3

Para el tramo siguiente 2<x<3

f 0 ( x )=1−3 ( x−2 )2+ 2 ( x−2 )3


2 3
f 1 ( x )=3 ( x−2 ) −2 ( x−2 )
2 3
g0 ( x )=( x−2 )−2 ( x−2 ) + ( x−2 )

g1 ( x ) =−( x−2 )2 + ( x−2 )3

Se tendría que la segunda derivada en x 1=1

f 0 ' '=−6

f 1 ' ' =6

g0 ' ' =−4

g1 ' '=−2

La segunda derivada en x 1=1 evaluada con el spline del tramo (1<x<2)


'' '
y =−6 y 1 +6 y 2−4 y 1−2 y 2 '
Como se toma que hay continuidad en la segunda derivada se tiene que:
' ' '
6 y 0−6 y 1+2 y 0 + 4 y 1=−6 y 1 +6 y 2−4 y 1−2 y 2 '

Lo que se tiene una ecuación que involucra las incógnitas que en este caso son las pendientes.

Si se arregláramos esta ecuación, se tendría lo siguiente:

y '0 + 4 y '1+ y '2=3 ( y 2− y 0 )

Si se involucra más tramos

Se tiene un sistema de ecuaciones lineales

y '0 + 4 y '1+ y '2=3 ( y 2− y 0 )

y '1 +4 y '2+ y '3 =3 ( y 3− y 1 )


' ' '
y 2 +4 y 3+ y 4=3 ( y 4− y 2 )

Consecutivamente

y 'n−1 +4 y 'n+ y 'n+1=3 ( y n +1− y n−1 )

Así sucesivamente hasta el punto final “ N”


' ' '
y N−2 +4 y N−1 + y N =3 ( y N − y N −2)

' ' '


Se tiene y 0 , y 1 ,,, y N se tiene (N+1) incógnitas

El número de ecuaciones se tiene (N-1)

Se requieren otras dos ecuaciones. Dar un valor para la pendiente en los extremos.
'
y 0=a
'
y N =b

Al final se tiene un sistema de ecuaciones

[ ( )][ ] [ ]
y0 ' a
1 0 0 0 0 0
⋯ y1 ' 3 ( y 2− y 0 )
1 4 1 0 0 0
0 1 4 0 0 0 y2 ' 3 ( y 3− y 1 )
⋮ ⋱ ⋮ ⋮ = ⋮
0 0 0 4 1 0 y N −2 ' 3 ( y N−1− y N−3 )
0 0 0 ⋯ 1 4 1 y N −1 ' 3 ( y N − y N −2 )
0 0 0 0 0 1 yN' b

Para esta clase de problemas se tendría una matriz tridiagonal (los elementos diferentes de cero
están en la diagonal principal y en las dos adyacentes).

Para este tipo de matrices

[( ) ] [( )]
b0 c0 0 0 0 0 1 p0 0 0 0 0
a1 b 1 c1 ⋯ 0 0 0 0 1 p1 ⋯ 0 0 0
0 a2 b2 0 0 0 0 0 1 0 0 0
⋮ ⋱ ⋮ → ⋮ ⋱ ⋮
0 0 0 b N−2 c N−2 0 0 0 0 1 p N−2 0
0 0 0 ⋯ a N−1 b N −1 c N −1 0 0 0 ⋯ 0 1 p N−1
0 0 0 0 aN bN 0 0 0 0 0 1

Pasar de matriz con valores en tres diagonales a una matriz con valores en dos diagonales.

Nuestro sistema de ecuaciones que era originalmente

[( ) ][ ] [ ]
b0 c0 0 0 0 0 y0 ' d0
a1 b 1 c1 ⋯ 0 0 0 y1 ' d1
0 a2 b2 0 0 0 y2 ' d2
⋮ ⋱ ⋮ ⋮ = ⋮
0 0 0 b N−2 c N−2 0 y N −2 ' d N −2
0 0 0 ⋯ a N−1 b N −1 c N −1 y N −1 ' d N −1
0 0 0 0 aN bN yN ' dN
Se convertiría en

[( )] [ ] [ ]
1 p0 0 0 0 0 y0' q0
0 1 p1 ⋯ 0 0 0 y1' q1
0 0 1 0 0 0 y2' q2
⋮ ⋱ ⋮ ⋮ = ⋮
0 0 0 1 p N−2 0 y N −2 ' q N −2
0 0 0 ⋯ 0 1 p N−1 y N −1 ' q N −1
0 0 0 0 0 1 yN' qN

Si lo tenemos de la forma de la segunda matriz, ya sería muy fácil encontrar las incógnitas.

Para último valor


'
y N =q N
Para el siguiente valor
' '
y N−1=q N −1− pN −1 y N
Y asi sucesivamente
' '
y n=qn− p n y n +1
Hasta llegar a la incógnita
' '
y 0=q0 −p 0 y 1

Entonces para el sistema de ecuaciones

[( ) ][ ] [ ]
b0 c0 0 0 0 0 y0 ' d0
a1 b 1 c1 ⋯ 0 0 0 y1 ' d1
0 a2 b2 0 0 0 y2 ' d2
⋮ ⋱ ⋮ ⋮ = ⋮
0 0 0 b N−2 c N−2 0 y N −2 ' d N −2
0 0 0 ⋯ a N−1 b N −1 c N −1 y N −1 ' d N −1
0 0 0 0 aN bN yN ' dN

Se tenemos la primera ecuación


' '
b 0 y 0 +c 0 y 1=d 0
c0
p0 =
b0
d0
q 0=
b0

Ya tendría la primera ecuación del nuevo sistema de ecuaciones


' '
y 0 + p0 y 1=q 0

Para la segunda ecuación


' ' '
a 0 y 0 +b 1 y 1 +c 1 y 2 =d 1

Como ya se tiene que


' '
y 0 + p0 y 1=q 0
'
Se puede sustituir y 0 en la ecuación y dar lo siguiente

a 0 ( q0 −p 0 y '1 ) + b1 y '1 +c 1 y '2=d 1

Arreglar la ecuación, juntando términos semejantes

( b 1−a0 p0 ) y '1 +c 1 y '2=d 1−a0 q 0


Y después

'
y1 +
[ c1
b1−a0 p 0
'
y 2=
]
d 1−a0 q0
b1−a0 p 0

c1
p1=
b1−a0 p 0

d 1−a 0 q0
q 1=
b1−a 0 p0

Y continuando sucesivamente con las demás ecuaciones se tendría que:


' ' '
a n y n−1 +b n y n +c n y n+1=d n

Como ya se tiene que


' '
y n−1 + pn−1 y n =qn −1
'
Se puede sustituir y n−1 en la ecuación y dar lo siguiente

a n ( qn−1− p n−1 y 'n ) +b n y 'n + cn y 'n+1 =d n

Arreglar la ecuación, juntando términos semejantes

( b n−a n pn−1 ) y '1+ c n y '2=d n−a n q n−1


Y después

'
y1 +
[ cn
bn−an p n−1
'
y 2=
]
d n −an q n−1
bn −an p n−1

cn
pn =
b n−a n pn−1

d n−an qn−1
q n=
bn−an p n−1

Para este tipo de matrices

[( ) ] [( )]
b0 c0 0 0 0 0 1 p0 0 0 0 0
a1 b 1 c1 ⋯ 0 0 0 0 1 p1 ⋯ 0 0 0
0 a2 b2 0 0 0 0 0 1 0 0 0
⋮ ⋱ ⋮ → ⋮ ⋱ ⋮
0 0 0 b N−2 c N−2 0 0 0 0 1 p N−2 0
0 0 0 ⋯ a N−1 b N −1 c N −1 0 0 0 ⋯ 0 1 p N−1
0 0 0 0 aN bN 0 0 0 0 0 1

Pasar de matriz con valores en tres diagonales a una matriz con valores en dos diagonales.

Nuestro sistema de ecuaciones que era originalmente


[( ) ][ ] [ ]
b0 c0 0 0 0 0 y0 ' d0
a1 b 1 c1 ⋯ 0 0 0 y1 ' d1
0 a2 b2 0 0 0 y2 ' d2
⋮ ⋱ ⋮ ⋮ = ⋮
0 0 0 b N−2 c N−2 0 y N −2 ' d N −2
0 0 0 ⋯ a N−1 b N −1 c N −1 y N −1 ' d N −1
0 0 0 0 aN bN yN ' dN

Se convertiría en

[( )] [ ] [ ]
1 p0 0 0 0 0 y0' q0
0 1 p1 ⋯ 0 0 0 y1' q1
0 0 1 0 0 0 y2' q2
⋮ ⋱ ⋮ ⋮ = ⋮
0 0 0 1 p N−2 0 y N −2 ' q N −2
0 0 0 ⋯ 0 1 p N−1 y N −1 ' q N −1
0 0 0 0 0 1 yN' qN

Si lo tenemos de la forma de la segunda matriz, ya sería muy fácil encontrar las incógnitas.

Para último valor


'
y N =q N

Para el siguiente valor


' '
y N−1=q N −1− pN −1 y N

Y asi sucesivamente
' '
y n=qn− p n y n +1

Hasta llegar a la incógnita


' '
y 0=q0 −p 0 y 1

Tarea: programar este tipo de splines para un problema, (la elección del problema es a su
elección).
Interpolación con segmentos cúbicos paramétricos

x2,y2

x0,y0

x3,y3

x1,y1

3 2 2 3
x ( t )=( 1−t ) x 0+ 3t ( 1−t ) x 1+ 3t (1−t ) x 2+ t x 3

y ( t ) =( 1−t )3 y 0 +3 t ( 1−t )2 y 1+3 t 2 ( 1−t ) y 2 +t 3 y 3

Así estarían definidos los valores de “x” y de “y” en función del parámetro “t”.

Donde t están en el rango 0 ≤ t ≤ 1.

Si tenemos que t=0

x ( 0 )=x 0

y ( 0 )= y 0

Si tenemos que t=1

x ( 1 ) =x3

y ( 1 )= y 3

Si derivamos
dx ( t )
=−3 ( 1−t )2 x 0 +3 [ ( 1−t )2−2 t ( 1−t ) ] x1 +3 [ 2 t ( 1−t )−t 2 ] x 2 +3 t 2 x 3
dt

dy (t )
=−3 ( 1−t )2 y 0 +3 [ ( 1−t )2−2t ( 1−t ) ] y 1 +3 [ 2t ( 1−t )−t 2 ] y 2 +3 t 2 y 3
dt
Si tenemos que t=0

dx ( t )
=3 ( x 1−x 0 )
dt
La ecuación y es una ecuación similar por lo que se llega a

dy (t )
=3 ( y 1− y 0 )
dt
Entonces la derivada

dy ( t )
dy (t ) dt 3 ( y 1 − y 0 ) y 1− y 0
= = =
dx ( t ) dx ( t ) 3 ( x 1−x 0 ) x 1−x 0
dt

Si tenemos que t=1

dx ( t )
=3 ( x 3−x 2 )
dt
La ecuación y es una ecuación similar por lo que se llega a

dy (t )
=3 ( y 3− y 2 )
dt

Entonces la derivada

dy ( t )
dy (t ) dt 3 ( y 3 − y 2 ) y 3− y 2
= = =
dx ( t ) dx ( t ) 3 ( x 3−x 2 ) x 3−x 2
dt
Integración numérica

Para este fin habría que retomar los polinomios de Lagrange

y=∑ y n Ln ( x )


i≠n
( x −xi )
Ln ( x ) =
∏ ( x n−x i )
i ≠n

También podría gustarte