Академический Документы
Профессиональный Документы
Культура Документы
M. Audelo
Interpolacin de Splines
1.1
Funcin spline
Consiste en una funcin formada por varios polinomios, cada uno sobre un intervalo que se unen obedeciendo ciertas
condiciones de continuidad.
Supongamos que tenemo n + 1 puntos x0 ; x1 ; x2 ; :::; xn (x0 < x1 < x2 < ::: < xn ), para K 0. Una funcin spline
de grado K es una funcin S que satisface:
1. En cada intervalo [xi
1 ; xi )
1 continua en [x0 ; xn ]
[x0 ; x1 )
[x1 ; x2 )
:
:
:
[xn 1 ; xn )
5
4
3
2
1
0
1
-1
-2
[x0 ; x1 )
[x1 ; x2 )
:
:
:
[xn 1 ; xn )
Mtodos Numricos
M. Audelo
5
4
3
2
1
0
1
-1
-2
El spline de grado 3 o ms concocido como spline cbico es el ms utilizado (K = 3), debido a que proporciona un
excelente ajuste a los puntos tabulados y su clculo no es excesivamente complejo
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1.0
-1
1.2
Spline cbico
Si [a; b] se divide en n intervalos x0 = a; x1 ; x2 ; :::; xn = b, S(x) se dice spline cbico en el intervalo [a; b] si satisface
las siguientes propiedades:
1. xi
xi+1
i = 0; 1; 2; :::; n
S(x) = Si (x) =
3
ix
2
ix
ix
2. S(xi ) = f (xi )
3. Si+1 (xi+1 ) = Si (xi+1 )
0
00
00
i = 0; 1; 2; :::; n
00
6. S (a) = S (b) = 0
Trazador Sujeto
Mtodos Numricos
M. Audelo
Una forma alternativa de hallar estos coecientes es suponer de partida que el polinomio cbico Si (x) en el intervalo
[xi ; xi+1 ] tiene la forma:
Si (x) = ai + bi (x
xi )2 + di (x
xi ) + ci (x
xi )3
xi )2 + di (xi
xi ) + ci (xi
xi )3 = f (xi )
xi
Si+1 (xi+1 ) = ai+1 + bi+1 (xi+1 xi+1 ) + ci+1 (xi+1 xi+1 )2 + di+1 (xi+1 xi+1 )3
Si (xi+1 ) = ai + bi (xi+1 xi ) + ci (xi+1 xi )2 + di (xi+1 xi )3 = ai + bi hi + ci h2i + di h3i
ai+1 = ai + bi hi + ci h2i + di h3i
0
Como Si (x) =
dS(x)
dx
= bi + 2ci (x
i = 0; 1; :::; n
(1)
xi ) + 3di (x
xi ) , utilizando la propiedad 4
0
Si+1 (xi+1 )
0
Si (xi+1 )
xi ) + 3di (xi+1
Como Si (x) =
d S(x)
dx2
= 2ci + 6di (x
xi+1 )2
i = 0; 1; :::; n
(2)
xi ), utilizando la propiedad 5
00
00
Si+1 (xi+1 )
00
Si (xi+1 )
xi+1 )
xi ) = 2ci + 6di hi
i = 0; 1; :::; n
ci+1 ci
3hi
ci+1 ci 3
hi
3hi
ci+1 ci 2
= ai + bi hi + ci h2i +
hi
3
1
1 2
= ai + bi hi + ci h2i + ci+1 h2i
ci h
3
3 i
= ai + bi hi + ci h2i +
(3)
Mtodos Numricos
M. Audelo
1
ai+1 = ai + bi hi + (2ci + ci+1 )h2i
3
(4)
bi+1
bi+1
bi+1
bi+1
bi+1
(5)
ai+1 ai
hi
1
(2ci + ci+1 )hi
3
(6)
ai
ai
hi
bi = bi
1
(2ci
3
+ ci )hi
(7)
+ ci )hi
(8)
1
(2ci
3
+ ci )hi
ai+1 ai
hi
3(ai+1 ai )
hi
3(ai+1 ai )
hi
3(ai ai
hi 1
3(ai+1 ai )
hi
3(ai ai
hi 1
3(ai+1 ai )
hi
1)
3(ai ai
hi 1
1)
3(ai ai
hi 1
1)
= 2ci hi + ci+1 hi
1)
= ci
1 hi 1
2ci
+ 2(hi
+ (ci
+ ci )hi
(2ci
+ ci )hi
+ 3(ci
+ ci )hi
(2ci
+ ci )hi
+ 3(ci
+ ci )hi
1 hi 1
ci hi
+ 3ci
+ hi )ci + ci+1 hi
1 hi 1
+ 3ci hi
i = 1; 2; :::; n
1 ecuaciones:
3(a1 a0 )
h0
3(a2 a1 )
h1
3(a3 a2 )
h2
= c0 h0 + 2(h0 + h1 )c1 + c2 h1
= c1 h1 + 2(h1 + h2 )c2 + c3 h2
= c2 h2 + 2(h2 + h3 )c3 + c4 h3
.
.
.
3(an an
hn 1
1)
3(an
hn
an
2
2)
= cn
2 hn 2
+ 2(hn
+ hn
1 )cn 1
+ cn hn
Mtodos Numricos
M. Audelo
00
3(a2 a1 )
h1
3(a3 a2 )
h2
3(a4 a3 )
h3
3(an an
hn 1
1)
3(an
= c0
= c0 h0 + 2(h0 + h1 )c1 + c2 h1
= c1 h1 + 2(h1 + h2 )c2 + c3 h2
= c2 h2 + 2(h2 + h3 )c3 + c4 h3
:
:
:
2)
= cn 2 hn 2 + 2(hn 2 + hn 1 )cn
0 = cn
3(a1 a0 )
h0
3(a2 a1 )
h1
3(a3 a2 )
h2
hn
an
2
+ cn hn
2
3
32 3
0
c0
3(a2 a1 )
3(a1 a0 )
6
7
7 6 c1 7 6
7
h1
h0
76 7 6
7
3(a3 a2 )
3(a2 a1 )
7 6 c2 7 6
7
h2
h1
76 7 6
7
3(a4 a3 )
3(a3 a2 )
7 6 c3 7 6
7
76 7 = 6
7
h3
h2
76 : 7 6
7
:
76 7 6
7
76 : 7 6
7
:
:
76 7 6
7
3(an 1 an 2 ) 7
3(an an 1 )
hn 2 2(hn 2 + hn 1 ) hn 1 5 4 : 5 6
4 hn 1
5
hn 2
cn
:
0
1
0
Una vez resuelto el sistema y determinado los coecientes c0 ; c1 ; c2 ; :::; cn , utilizamos las ec. 3 para determinar di y
la ec. 6 para hallar bi conjuntamente con ai = f (xi ).
Por lo tanto el spline cbico quedara determinado como:
8
S0 (x) = a0 + b0 (x x0 ) + c0 (x x0 )2 + d0 (x x0 )3
[x0 ; x1 )
>
>
>
2
3
>
S
(x)
=
a
+
b
(x
x
)
+
c
(x
x
)
+
d
(x
x
)
[x1 ; x2 )
>
1
1
1
1
1
1
1
1
>
>
>
[x2 ; x3 )
< S2 (x) = a2 + b2 (x x2 ) + c2 (x x2 )2 + d2 (x x2 )3
:
:
S(x) =
>
>
:
:
>
>
>
>
:
:
>
>
:
Sn 1 (x) = an 1 + bn 1 (x xn 1 ) + cn 1 (x xn 1 )2 + dn 1 (x xn 1 )3 [xn 1 ; xn )
:
:
:
0
:
:
:
:
:
:
0
0
0
:
:
:
y = f (xi )
0:0247500
0:3349375
1:1010000
S0 (x) = a0 + b0 (x
S1 (x) = a1 + b1 (x
x0 ) + c0 (x
x1 ) + c1 (x
x0 )2 + d0 (x
x1 )2 + d1 (x
x0 )3
x1 )3
[ 0:5; 0:25)
[ 0:25; 0)
Determinamos la diferencia entre dos puntos consecutivos, donde se denira cada polinomio cbico
hi = xi+1 xi
h0 = x1 x0 = 0:25 ( 0:5) = 0:25
h1 = x2 x1 = 0 ( 0:25) = 0:25
Los valores del los coecientes ai son:
ai = f (xi )
a0 = f (x0 ) = 0:0247500
a1 = f (x1 ) = 0:3349375
a2 = f (x2 ) = 1:1010000
c0 = 0
c2 = 0
5
Mtodos Numricos
para i = 1
3
ai )
hi (ai+1
3
a1 )
h1 (a2
3
hi
3
h0 (a1
M. Audelo
(ai ai 1 )
3
3
ao ) = 0:25
(1:1010000 0:3349375) 0:25
(0:3349375 + 0:0247500) = 4: 876 5
2
32
3
3 2
0
1
0
0
c0
3
4 h0 2(h0 + h1 ) h1 5 4 c1 5 = 4 3 (a2 a1 )
ao ) 5
h1
h0 (a1
0
0
1
c2
0
2
32
3 2
3
1
0
0
c0
0
4 0:25 1 0:25 5 4 c1 5 = 4 4: 876 5 5
0
0
1
c2
0
1
4 0:25
0
0
0
1 0:25
0
1
3
0
4:8765 5
0
0:5 x
0:25
0:25 x 0
1.2
1.0
0.8
0.6
0.4
0.2
-0.6
-0.5
-0.4
-0.3
-0.2
-0.1
0.1
-0.2
Mtodos Numricos
M. Audelo
Ejemplo 4 La temperatura media en un recinto vara con respecto al tiempo, un grupo de termocuplas sensa la
temperatura en diferentes puntos del recinto, las cuales a travs de una tarjeta de adquisicin de datos enva los
valores hacia un computador la cual calcula la media en cada instante de tiempo que se registra, entregando la
siguiente informacin:
i
ti ( min)
Ti = f (ti )( C)
0
10
14
1
25
10
2
38
21
3
59
15
t0 ) + c0 (t
t1 ) + c1 (t
t2 ) + c2 (t
t0 )2 + d0 (t
t1 )2 + d1 (t
t2 )2 + d2 (t
t0 )3
t1 )3
t2 )3
[10; 25)
[25; 38)
[38; 59)
Determinamos la diferencia entre dos puntos consecutivos, donde se denira cada polinomio cbico
hi = ti+1 ti
h0 = t1 t0 = 25 10 = 15
h1 = t2 t1 = 38 25 = 13
h2 = t3 t2 = 59 38 = 21
Los valores del los coecientes ai son:
ai = f (ti )
a0 = f (t0 ) = 14
a1 = f (t1 ) = 10
a2 = f (t2 ) = 21
a3 = f (t3 ) = 15
c0 = 0
c3 = 0
para i = 1; 2
3
ai ) hi3 1 (ai ai 1 )
hi (ai+1
3
3
3
a1 ) h30 (a1 ao ) = 13
(21 10) 15
(10 14) = 217
h1 (a2
65 = 3:338461538
3
3
3
309
3
(a
a
)
(a
a
)
=
(15
21)
(21
10)
=
3:395604396
3
2
2
1
h2
h1
21
13
91 =
Por tanto:
3
2
32
3 2
0
1
0
0
0
c0
6 h0 2(h0 + h1 )
6
7 6 217 7
h1
0 7
6
7 6 c1 7 = 6 65
7
4 0
5
5
4
h1
2(h1 + h2 ) h2
c2 5 4 309
91
0
0
0
1
c3
0
2
32
3 2
3
0
1
0
0
0
c0
6 15 56 13 0 7 6 c1 7 6 217 7
6
76
7 6 65 7
4 0 13 68 21 5 4 c2 5 = 4 309 5
91
0
0
0
1
c3
0
Resolviendo por el mtodo de Gauss simple
2
1 0
0
6 0 56
13
6
4 0 0 64:98214286
0 0
0
32
0
c0
6 c1
0 7
76
21 5 4 c2
1
c3
7 6
7=6
5 4
7
7
4:170604396 5
0
217
65
Mtodos Numricos
217
M. Audelo
13 ( 6:418 077663 10
c1 = 65
= 0:07451
56
4:170604396
= 0:06418
c2 = 64:98214286
c3 = 0
1
por tanto con bi = ai+1hi ai
3 (2ci + ci+1 )hi
b0 = 0:63924
b1 = 0:47848
b2 = 0:61282
ci
Con di = ci+1
3hi
d0 = 1:65588 10 3
d1 = 3:55629 10 3
d2 = 1:01874 10 3
Las ecuaciones son:
S0 (t) = 14 0:63924(t 10) + 1:65588 10 3 (t 10)3 = 0:001 655 88t3 0:049 676 4t2 0:142 476 t + 18: 736 52
S1 (t) = 10 + 0:47848(t 25) + 0:07451(t 25)2 3:55629 10 3 (t 25)3 = 0:003 556 29t3 + 0:341 231 75t2 9:
915 063 75t + 100: 173 781 3
S2 (t) = 21 + 0:61282(t 38) 0:06418(t 38)2 + 1:01874 10 3 (t 38)3 = 0:001 018 74t3 0:180 316 36t2 + 9:
903 681 68t 150: 863 381 3
8
0:001 655 88t3 0:049 676 4t2 0:142 476 t + 18: 736 52
10 t < 25
<
0:003 556 29t3 + 0:341 231 75t2 9: 915 063 75t + 100: 173 781 3 25 t < 38
S(x) =
:
0:001 018 74t3 0:180 316 36t2 + 9: 903 681 68t 150: 863 381 3 38 t < 59
S(t) 30
20
10
0
0
10
20
30
40
1.3
Programa en Matlab
clc;
clear;
fprintf(INTERPOLACIN CON EL MTODO DE SPLINES CBICOSnn);
n=input(nnDigite el nmero de puntos: );
for i=1:n
fprintf(x(%d) = ,i);
x(i)=input(n);
50
60
Mtodos Numricos
M. Audelo
fprintf(y(%d) = ,i);
y(i)=input(n);
end
for i=1:n-1
h(i)=x(i+1)-x(i);
end
for i=1:n
a(i)=y(i);
end
v(1)=0;
v(n)=0;
for i=2:n-1
v(i)=3*((a(i+1)-a(i))/h(i))-3*((a(i)-a(i-1))/h(i-1));
end
H(1,1)=1;
H(n,n)=1;
for i=2:n-1
H(i,i)=2*(h(i-1)+h(i));
H(i,i-1)=h(i-1);
H(i,i+1)=h(i);
end
%Resuelve el sistema de ecuaciones
%Matriz aumentada
for i=1:n
H(i,n+1)=v(i);
end
%Transforma la matriz H en una matriz triangular superior
for k=1:n-1
for i=k+1:n
factor=H(i,k)/H(k,k);
for j=k:n+1
H(i,j)=H(i,j)-factor*H(k,j);
end
end
end
%Sustitucin hacia atras y determina los coeficientes c
c(n)=H(n,n+1)/H(n,n);
for i=n-1:-1:1
sum=H(i,n+1);
for j=i+1:n
sum=sum-H(i,j)*c(j);
end
c(i)=sum/H(i,i);
end
%Determina los coeficientes d y b
for i=1:n-1
d(i)=(c(i+1)-c(i))/(3*h(i));
b(i)=((a(i+1)-a(i))/h(i))-((2*c(i)+c(i+1))*h(i))/3;
end
%Muestra todos los coeficientes
disp(i a b c d)
for i=1:n-1
fprintf(%d %5.4f %5.4f %5.4f %5.4fnn,i-1,a(i),b(i),c(i),d(i));
end