Mtodos numricos
Informtica Aplicada
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 .
x xk
x xk+1
+ S 00 (xk+1 )
xk xk+1
xk+1 xk
(1)
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)
mk
mk+1
(xk+1 x)3 +
(x xk )3 + pk (xk+1 x) + qk (x xk ) (4)
6hk
6hk
mk 2
h + pk hk
6 k
yk+1 =
mk+1 2
hk + qk hk
6
(5)
)(xk+1 x) + (
)(x xk )
hk
6
hk
6
Sk (x) =
(6)
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)
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:
(9)
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)
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
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
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
7
8
9
10
11
12
13
14
15
16
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
30
31
32
33
%Otras definiciones
cant = length(X);
N = cant - 1; %N es la cantidad de puntos menos 1.
34
35
36
37
38
39
40
41
42
43
%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
65
66
67
68
69
70
for k=1:N
S(k, 1)
S(k, 2)
S(k, 3)
S(k, 4)
=
=
=
=
71
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
3
4
5
6
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
6
7
8
N = length(X) - 1;
T = 0:N;
7
9
10
11
12
13
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;
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
11