Anda di halaman 1dari 12

Universidad Nacional de Rosario

Facultad de Ciencias Exactas, Ingeniera y Agrimensura


Departamento de Matemtica

Trabajo Prctico Aplicado


2013
Splines

Mtodos numricos
Informtica Aplicada

Alumno: Facundo Cosimo


Fecha de entrega: 22/11/2013

Resolucin tarea 1
Dado un conjunto de N + 1 puntos a interpolar {(xk , yk )}N
k=0 , se nos pide determinar, a partir de stos datos, los valores de mk y de los coeficientes
sk,0 , sk,1 , sk,2 , sk,3 .

Desarrollo del problema


Como S(x) es un polinomio cbico definido a trozos, su derivada segunda
S 00 (x) ser un polinomio lineal definido a trozos en [x0 , xn ]. Aplicando la frmula de interpolacin lineal de Lagrange en el intervalo [xk , xk+1 ] tenemos:
Sk00 (x) = S 00 (xk )

x xk
x xk+1
+ S 00 (xk+1 )
xk xk+1
xk+1 xk

(1)

Segn la notacin propuesta, tenemos que


hk = xk+1 xk

dk =

yk+1 yk
hk

mk = Sk00 (xk )

(2)

con k = 0, 1, ..., N 1
Reemplazando con la notacin anterior en la ecuacin (1):
Sk00 (x) =

mk
mk+1
(xk+1 x) +
(x xk )
hk
hk

(3)

para cualquier x[xk , xk+1 ] y k = 0, 1, ..., N 1. A modo de obtener la ley del


polinomio Sk (x), debemos integrar dos veces la relacin (5). El resultado de la
integracin puede ser escrito como:
Sk (x) =

mk
mk+1
(xk+1 x)3 +
(x xk )3 + pk (xk+1 x) + qk (x xk ) (4)
6hk
6hk

Utilizando la ecuacin anterior, evaluamos Sk (xk ) y Sk (xk+1 ), sabiendo que


Sk (xk ) = yk y Sk (xk+1 ) = yk+1 , obteniendo el siguiente resultado:
yk =

mk 2
h + pk hk
6 k

yk+1 =

mk+1 2
hk + qk hk
6

(5)

Despejando pk y qk de la ecuacin anterior y reemplazando en (4), obtenemos


la siguiente expresin para Sk (x)
mk
mk+1
(xk+1 x)3 +
(x xk )3 +
6hk
6hk
yk
mk hk
yk+1
mk+1 hk
(

)(xk+1 x) + (

)(x xk )
hk
6
hk
6
Sk (x) =

(6)

Ahora, el problema simplemente consiste en la determinacin de los coeficientes


{mk }, ya que dado el conjunto de puntos a interpolar, los coeficientes {yk } y
{hk } son conocidos.

Determinacin de {mk }
Para determinar el valor los {mk }, comenzamos derivando la expresin en
(6) y evalundola en el punto xk para hallar la derivada por la derecha de S en
xk . Simplificando el resultado, obtenemos:
Sk0 (xk ) =

mk
mk+1
hk
hk + dk
3
6

(7)

De manera similar, para obtener la derivada por la izquierda de S en xk obte0


nemos la expresin de Sk1
(xk )
0
Sk1
(xk ) =

mk
mk1
hk1 +
hk1 + dk1
3
6

(8)

0
De las ecuaciones (7) y (8) y recordando que Sk0 (xk+1 ) = Sk+1
(xk+1 ), podemos
escribir la siguiente relacin:

hk1 mk1 + 2(hk1 + hk )mk + hk mk+1 = 6(dk dk1 ) = uk

(9)

donde uk = 6(dk dk1 ) para k = 0, 1, ..., N 1.


La relacin (9) es de suma importancia, ya que sus incgnitas son los valores buscados {mk }. Podemos interpretar a la relacin anterior como un sistema
de N 1 ecuaciones lineales con N + 1 incgnitas. Las dos ecuaciones necesarias
sern las condiciones impuestas en los extremos.
Para el presente prctico, al tratarse de cerchas naturales, sabemos que
m0 = 0

mN = 0

(10)

Por lo tanto, formando un sistema de ecuaciones lineal con las ecuaciones en (9)
y las condiciones impuestas en (10) resulta un sistema de N 1 incgnitas con
N 1 ecuaciones.
El sistema resultante es un sistema lineal tridiagonal HM=V cuya expresin
de forma matricial tiene la siguiente forma:

b1 c1
0

0
m1
u1
a2 b2 c2

m2 u2
0 a3 b3

c3
0

0 m3 u3

0 0 a4 b4

c4

m4 = u4 (11)
..

..
..
..
..
..
..
..
..
.

.
.
.
.
.
.
.
.

0 0 aN 2 bN 2 cN 2 mN 2 uN 2
0 0

aN 1 bN 1
mN 1
uN 1
En donde, en una notacin diferente a la utilizada en la bibliografa recomendada, se tomaron los valores de a, b y c como:
a = hk1

b = 2(hk+1 + hk )

c = hk

(12)

La matriz en (11) es diagonal estrictamente dominante, como puede observarse


fcilmente, por lo que sabemos que ser una matriz regular (es decir, existe A1 )

Una vez resuelto el sistema lineal anterior y calculados los coeficientes {mk }, los
coeficientes de la cerca {sk,j } para el trozo Sk (x) estn dados por las frmulas
hk (2mk + mk+1 )
6
mk+1 mk
sk,3 =
6hk

sk,1 = dk

sk0 = yk

sk,2 =

mk
2

(13)

con k = 0, 1, ..., N 1

Resumen
En resumen, pasando en limpio lo anterior para utilizarlo en fines prcticos,
los pasos a seguir para encontrar los coeficientes de las cerchas interpolantes
Sk (x) son los siguientes:
1. Determinar las condiciones de borde del spline (los valores de m0 y mN ).
2. A partir de la ecuacin (9), formar y resolver el sistema lineal tridiagonal
HM = V para determinar el valor de los coeficientes mk .
3. Determinar el valor de los coeficientes de la cercha Sk (x).

Resolucin tarea 2
Dados los puntos {(3, 1), (1, 3), ( 12 , 2), (2, 1), (5, 6)}, se pide determinar los valores de hk , dk , mk y los coeficientes sk,i .
En ste caso tenemos un total de 5 puntos, por lo que N = 4
yk
Sabemos que hk = xk+1 xk y dk = yk+1
para k = 0, 1, ..., N 1.
hk
Reemplazando los valores en la expresin anterior obtenemos
y1 y0
3 (1)
=
=2
h0
2
y2 y1
2
23
d1 =
=
=
h1
1,5
3
y3 y2
(1) 2
d2 =
=
= (2)
h2
1,5
6 (1)
7
y4 y3
d3 =
=
=
h3
3
3
d0 =

h0 = x1 x0 = (1) (3) = 2
1
h1 = x2 x1 = (1) = 1,5
2
1
h2 = x3 x2 = 2 = 1,5
2
h3 = x4 x3 = 5 2 = 3

Ahora debemos determinar los coeficientes {mk }. Para ello, a partir de la


ecuacin (9) formamos el siguiente sistema lineal tridiagonal de 3 ecuaciones
con 3 incgnitas
2(h0 + h1 )m1 + h1 m2 = 6(dk dk1 ) h0 m0
h1 m1 + 2(h1 + h2 )m2 + h2 m3 = 6(dk dk1 )
h2 m2 + 2(h2 + h3 )m3 = 6(dk dk1 ) h3 m4

Recordando que al tratarse de un spline natural, quedan impuestas las condiciones m0 = 0 y mN = 0.Al resolver el sistema anterior, encontramos que los
valores de {mk } son
m0 = 0
m1 1,9342
m2 1,6404
m3 3,1623
m4 = 0
Finalmente, queda determinar los coeficientes sk,i del polinomio cbico
Sk (x) = sk,0 + sk,1 (x xk ) + sk,2 (x xk )2 + sk,3 (x xk )3
Los coeficientes estn dados por las relaciones en (11). Por lo tanto, para sta
situacin los valores de los mismos son:
s2,0 = 3

s3,0 = 2

s4,0 = 1

s2,1 0,7105

s3,1 1,9703

s4,1 0,8289

s1,1 2,6447

s2,2 0,9671

s3,2 0,8201

s4,2 1,5811

s1,2 = 0

s2,3 0,0326

s3,3 0,5336

s4,3 0,1756

s1,0 = 1

s1,3 0,1611

La grfica resultante del polinomio S(x) es la siguiente:

Figura 1: Grfica obtenida con Matlab para el conjunto de puntos


4

Resolucin tarea 3
Se pide desarrollar en matlab una funcin SPLine1.m que admita como
argumentos un par de vectores X e Y con los puntos (xk , yk ), y otro vector XX
con los puntos a interpolar. La funcin deber devolver un vector YY con el
resultado de evaluar el spline natural S sobre los puntos definidos en XX
1
2
3
4
5
6

function YY = SPLine1(X, Y, XX)


%Antes que nada, compruebo que los valores ingresados sean correctos
if (length(X) ~= length(Y))
fprintf(Las dimensiones no coinciden.);
return;
end

7
8
9
10
11

if ~isequal(X,sort(X)) %Uso isequal para comparacin entre vectores


fprintf(Valores de X desordenados.);
return;
end

12
13
14
15
16

%Ya se que estan ordenados, necesariamente X(1) va a ser el menor y


%X(length(X)) el mayor.
a = X(1);
b = X(length(X));

17
18
19
20
21
22
23

for i=1:length(XX)
if (XX(i) < a || XX(i) > b)
fprintf(Valores fuera de rango.);
return;
end
end

24
25

i = 1;

26
27
28
29

%Ac defino el tipo de spline


m0 = 0;
mN = 0;

30
31
32
33

%Otras definiciones
cant = length(X);
N = cant - 1; %N es la cantidad de puntos menos 1.

34
35
36
37

%En realidad, k va desde 0 a N-1. En mi script, j entonces va de 1 a N


H = X(2:N+1) - X(1:N);
D = (Y(2:N+1)-Y(1:N))./H;

38
39
40
41
42
43

%Calculo los coeficientes m_k


%En realidad, k va desde 1 a N-1, en mi script k va desde 2 a N
A = zeros(N-1, N-1);
for i = 2:N
%A todos los indices de la matriz tengo que restarles 1, ya que empieza
5

%a contar desde 2
A(i-1, i-1) = 2*(H(i)+H(i-1));
U(i-1) = 6*(D(i)-D(i-1));

44
45
46
47

if (i-1 ==
U(i-1)
else
A(i-1,
end
if (i-1 ==
U(i-1)
else
A(i-1,
end

48
49
50
51
52
53
54
55
56
57
58

1)
= U(i-1) - H(i-1)*m0;
i-2) = H(i-1);
N-1)
= U(i-1) - H(i-1)*mN;
i) = H(i);

end

59
60

M = Gauss(A,U);

61
62
63
64

%A PARTIR DE AC , DETERMINO LOS COEFICIENTES


%En realidad, k va desde 0 a N-1, en mi script k va desde 1 a N
M = [m0;M;mN];

65
66
67
68
69
70

for k=1:N
S(k, 1)
S(k, 2)
S(k, 3)
S(k, 4)

=
=
=
=

Y(k); %Este sera s_(k-1,0)


D(k)-(H(k)*(2*M(k)+M(k+1))/6); %Este sera s_(k-1,1)
M(k)/2; %Este sera s_(k-1,2)
(M(k+1)-M(k))/(6*H(k)); %Este sera s_(k-1,3)

71

expresion = strcat(num2str(S(k,1)), +, num2str(S(k,2)), *(x-, ...


num2str(X(k)), )+, num2str(S(k,3)), *(x-, num2str(X(k)), ...
).^2+,num2str(S(k,4)), *(x-, num2str(X(k)), ).^3);
funcion = inline(expresion);

72
73
74
75
76

a = X(k);
b = X(k+1);
for j=1:length(XX)
if (XX(j) <= b && XX(j) >= a)
YY(j) = funcion(XX(j));
end
end

77
78
79
80
81
82
83
84
85

end
end

Resolucin tarea 4
Se pide realizar un script Tarea4.m que grafique el spline cbico natural que
pase por los puntos mencionados en la Tarea 2.

1
2

X = [-3 -1 0.5 2 5];


Y = [-1 3 2 -1 6];

3
4
5
6

XX = -3:0.02:5; %Hay 401 puntos equidistanciados


YY = SPLine1(X, Y, XX);
plot(XX, YY, b, X, Y, *k);

Figura 2: Grfica obtenida con Matlab para el conjunto de puntos de la tarea


2. Los astriscos son los puntos de unin

Resolucin tarea 5
Se pide implementar en MatLab una funcin SPLine2.m que admita como
argumentos un par de vectores X e Y con los puntos (xk , yk ) y otro vector TT
con los puntos a interpolar. La funcin deber devolver un par de vectores XX
e YY con el resultado de evaluar el spline cbico uniforme S sobre los puntos
definidos en TT.
1
2
3
4
5

function [XX, YY] = SPLine2(X, Y, TT)


if (length(X) ~= length(Y))
fprintf(Las dimensiones no coinciden.);
return;
end

6
7
8

N = length(X) - 1;
T = 0:N;
7

9
10
11
12
13

if (min(TT) < 0 || max(TT) > N)


fprintf(Verifique los parametros ingresados.);
return;
end

14
15
16
17

XX = SPLine1(T, X, TT);
YY = SPLine1(T, Y, TT);
end

Resolucin tarea 6
Se pide realizar un script llamado Tarea6.m para determinar la grfica del
spline cbico S que pasa por un conjunto de puntos dados.
1
2
3
4
5
6
7
8
9
10

X =
127
385
522
443
Y =
443
443
138
523

[214 177 158 121 84 51 23 20 24 32 39 65 92 112 130 144 147 143 ...
117 110 97 73 60 50 91 136 141 164 185 204 229 290 341 373 ...
392 395 388 370 343 329 318 311 316 334 373 425 485 502 526 ...
513 502 473 448 421 403 398 406 423 437 449 481 488 484 465 ...
395 336 277 224 213 218 233 242 237 224 214];
[530 522 512 495 468 440 415 411 405 397 391 416 439 451 462 456 ...
432 355 314 281 229 127 77 36 36 37 56 156 247 304 349 410 ...
451 451 445 429 395 327 237 186 139 92 52 26 22 49 95 111 ...
151 160 150 124 102 86 87 113 165 226 276 313 424 453 500 ...
530 518 483 437 387 377 398 468 507 523 529 530];

11
12
13
14

TT = 0:78/1000:78;
[XX, YY] = SPLine2(X, Y, TT);
plot(XX, YY, r, X, Y, *k);

Figura 3: Grfica obtenida con matlab para los puntos dados. Puede reconocerse una letra "n" minscula

Resolucin tarea 7
Se pide graficar, utilizando un spline cbico natural, la primer letra del apellido. En ste caso, se graficar la letra C, en imprenta mayscula, fuente Tahoma.
1
2
3
4
5
6
7
8

X = [318.4 318.4 299.16 229.17 192.21 163.97 137.17 113.58 94.71 83.7 ...
74.26 71.12 71.9 80.55 97.07 126.16 156.04 189.07 228.39 263 314.1 ...
318.82 318.82 313.94 296.01 241.28 200.5 184.67 134.15 93.14 42.18 ...
16.7 14.82 25.2 50.67 107.29 142.2 170.51 214.86 249.77 279.97 318.4];
Y = [25.14 86.78 73.52 39.71 35.78 40.5 52.29 70.38 94.76 120.7 152.94 ...
190.69 230.01 270.9 310.21 341.67 358.18 364.47 362.11 349.53 314.93 ...
314.93 377.05 379.96 388.9 406.38 411.1 410.16 404.49 379.96 322.4 ...
240.31 183.69 117.64 62.91 11.01 -3.14 -7.86 -8.81 -2.2 5.35 25.14];

9
10

N=length(X)-1;

11
12
13
14
15

TT = 0:N/1000:N;
[XX, YY] = SPLine2(X, Y, TT);
plot(XX, YY, r);
axis equal;

(b) Letra original


(a) Contorno graficado con splines

Figura 4: Comparacin entre el perfil original y el perfil graficado

Resolucin tarea 8
Se propone disear una figura de dos dimensiones que se corresponda con el
prefil de la carrocera de un automvil.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

X = [103.68 165.94 213.82 231.25 235.38 240.8 241.11 241.5 242.93 245.13 ...
249.51 256.44 263.01
267.03 277.62 286.02 293.32 295.87 294.78 ...
296.97 301.71 305 308.33 313.13 318.14 318.87 313.4 307.56 300.25 ...
279.08 265.94 251.33 234.6 215.2 196.57 176.49 161.9 136.7 120.63 ...
116.25 112.6 111 103.9 91.79 70 52 40.3 30 23.15 20.6 19.15 18.77 ...
19.15 21 22.706 23.52 25.7 27.9 31.6 39.22 42.5 44.33 45.79 45.95 ...
45.42 45.52 46.15 47.61 49.8 53.46 57.48 63.7 71.34 76.12 83.76 89.96 ...
95.44 100.55 103.84 104.2 103.68];
Y = [18.58 19.58 17.57 17.7 18.03 19.86 23.51 28.62 36.65 43.59 49.79 ...
54.9 57.82 58.19 57.42 53.44 45.05 35.19 24.24 23.14 22.78 27.16 33.86 ...
43.22 57 61.48 66.6 69.51 73 80.5 84.5 89 92.9 96.5 97.6 96.5 92.9 83 ...
76.5 75 75.73 75.3 75.3 74.62 73 69.9 65.5 61.15 56.36 54.5 52.3 49 ...
43.6 33 27.16 25.7 23.9 22.78 21 20.6 20.6 20.6 20.85 23.51 26.8 31.9 ...
37.4 42.5 47.6 52 55.63 59 60.75 60.75 59.6 57.46 52.71 46.14 36.65 ...
25.7 18.58];

16
17

N=length(X)-1;

18
19
20

TT = 0:N/1000:N;
[XX, YY] = SPLine2(X, Y, TT);

10

21
22

plot(XX, YY, r);


axis equal;

(b) Perfil original

(a) Perfil graficado con splines

Figura 5: Comparacin entre el perfil original y el perfil graficado

11

Anda mungkin juga menyukai