Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Gonzalo Hernndez
UChile - Departamento de Ingeniera Matemtica
El objetivo de este laboratorio es aprender a utilizar los comandos de Matlab que permiten para una funcin
o puntos (datos):
1) Operar con polinomios.
2) Calcular el polinomio de interpolacin y de aproximacin.
3) Calcular el polinomio trigonomtrico de aproximacin.
Este tema es de gran importancia por su amplia variedad de aplicaciones: Representacin de funciones,
ajuste de datos, clculo de parmetros de modelos, etc.
5x5 + 6x2 + 7x + 3
17
= x
+ 3x
(1)
El tipo de representacin que ocupa Matlab para los polinomios es el de un vector la o columna con los
coecientes ordenados de potencia mayor a menor, es decir, p y q se ingresan en Matlab de la siguiente forma:
>> p=[5 0 0 6 7 3]
p =
5
0
0
-1
Un polinomio p se puede evaluar en Matlab en un punto, vector o matriz x; utilizando el comando polyval:
y = polyval(p; x)
(2)
Por ejemplo:
>> p=[5 0 0 6 7 3];
>> x=[0:0.1:1];
>> px=polyval(p,x)
px =
Columns 1 through 8
3.0000
3.7601
4.6416
Columns 9 through 11
14.0784
17.1125
21.0000
5.6522
6.8112
8.1563
9.7488
11.6803
Las races de un polinomio son los puntos donde su evaluacin es igual a cero: x es raz de p(x) si y slo si:
p(x) = 0
(3)
El comando roots calcula el vector columna de todas las raices del polinomio p, reales y complejas. Se utiliza
de la siguiente forma:
r = roots(p)
(4)
>> r=roots(p)
r =
0.8477 + 0.9836i
0.8477 - 0.9836i
-0.7393
-0.4780 + 0.5028i
-0.4780 - 0.5028i
Este clculo se realiza mediante los valores propios de la matriz compaera de p: De forma inversa, el comando
poly(r) calcula el polinomio normalizado (el coeciente de la potencia mayor es igual a uno) cuyas races
estn dadas por r; es decir :
>> q=poly(r)
q = 1.0000
-0.0000
0.0000
1.2000
1.4000
0.6000
Dos polinomios del mismo grado pueden ser sumados (o restados) de la misma forma como se suman o restan
vectores. Cuando los polinomios no tienen el mismo grado se debe crear un vector auxiliar, que contenga el
polinomio de menor grado en la parte izquierda, y a la derecha se rellene con ceros hasta obtener la misma
dimensin del vector representante del polinomio de mayor grado. En nuestro caso, esto se debe hacer de la
siguiente forma:
>> s=[zeros(1,12) p]
s =
Columns 1 through 9
0
0
0
0
Columns 10 through 18
0
0
0
5
>> s=s+q
s =
Columns 1 through 14
1
0
0
0
Columns 15 through 18
0
6
10
2
(5)
Para utilizar esta funcin no es necesario que los polinomios p y q tengan el mismo orden:
>> t=conv(p,q)
t =
Columns 1 through 14
5
0
0
6
Columns 15 through 23
0
0
15
-5
18
15
-3
-0.2400
-0.2800
-1.9296
-1.3437
0
0
r =
Columns 1 through 8
0
0
0
Columns 9 through 16
0
0.0000
0.0000
Columns 17 through 18
18.1946
3.0310
(6)
-0.1200
0.2880
0.6720
-0.0000
4.8528
19.5696
24.9821
Interpolacin polinomial
En esta seccin se aprender a interpolar en base a datos obtenidos de alguna funcin (que se puede conocer
o no) utilizando los comandos interp1; interp2; polyf it; spline; csape. Las instrucciones interp1; interp2
interpolan datos en una y dos dimensiones en forma nmerica. La instruccin polyf it calcula los coecientes
del polinomio de interpolacin de Lagrange. Las instrucciones spline; csape calcula en forma numrica y
detallada los polinomios de interpolacin por trazos.
j=0
es el polinomio de menor grado que interpola estos puntos, es decir, que verica:
yk = pL (xk ) =
n
X
aj xjk
j=0
8k = 0; 1; :::; n
a0
7 6
7 6
7=6
5 4
(8)
y0
y1
..
.
yn
3
7
7
7
5
(9)
n
X
yk Ln;k (x)
(10)
k=0
Ln;k (x)
(x x0 )(x x1 )
(xk x0 )(xk x1 )
(x
(xk
xk 1 )(x xk+1 ) (x xn )
xk 1 )(xk xk+1 ) (xk xn )
8k = 0; ; 1:::; n
En el caso que los puntos (xk ; yk ) sean parte de una funcin f (x) de la cual no se conoce su forma analtica,
es decir:
yk = f (xk ) 8k = 0; 1; :::; n
(11)
el mtodo de interpolacin entrega una forma de aproximar esta funcin.
Teorema 1 Sean (n + 1) reales en el intervalo [a; b] tales que: x0 < x1 <
< xn ; y x0 = a; xn = b:
Entonces existe un nico polinomio pL (x) de grado n denido por (10) que verica:
yk = pL (xk )
8k = 0; 1; :::; n
(12)
Si adicionalmente, yk = f (xk ) donde f 2 C n+1 [a; b] ; entonces: (8x 2 [a; b]) (9 (x) 2 (a; b)) tal que:
f (x) = pL (x) +
f (n+1) ( (x))
(x
(n + 1)!
x0 )(x
x1 )
(x
xn )
(13)
f (n+1) ( (x))
(x
(n + 1)!
x0 )(x
x1 )
(x
xn )
(14)
es posible demostrar que para todo intervalo [a; b] existe una funcin contnua f tal que pL no converge en
forma uniforme a f: Basta considerar la funcin:
f (x) =
1
1 + x2
(15)
en el intervalo [ 5; 5] :
Contraejemplo de Runge
2
f(x)
p (x)
1.5
0.5
-0.5
-5
-4
-3
-2
-1
0
x
1
:
1 + x2
peL k1 /
n!1
2n+1
max f (xk )
en log n k=0;:::;n
fe(xk )
(16)
si los puntos x0 ; x1 ; :::; xn son equi-espaciados. Luego, calcular el polinomio de Lagrange es inestable numricamente en el caso de gran cantidad de puntos equi-espaciados, ver ref. [2].
Para mejorar la precisin y estabilidad numrica se utilizan polinomios de interpolacin de Lagrange por
trazos. Sean (n + 1) reales en el intervalo [a; b] tales que: x0 < x1 <
< xn ; y x0 = a; xn = b: Sea pi;k
L el
polinomio de Lagrange de grado k calculado en los puntos xi ; xi+1 ; :::; xi+k : Sean:
hj
= xj+1
xj ; j = 0; :::; n
max
j=0;:::;n 1
(17)
hj
pi;k
L
chk+1 f (k+1)
(18)
Luego, es posible obtener un error de interpolacin pequeo inclusive para valores bajos de k; si h
0:
Adicionalmente, es posible demostrar convergencia del polinomio de interpolacin por trazos en norma de:
(
)
Z
b
L2 (a; b)
kf kL2 (a;b)
jf (x)j dx < 1
(19)
! 21
jf (x)j dx
Teorema 2 Sea 0
m
(k + 1) con k
independiente de h = max hj tal que:
j=0;:::;n 1
pi;k
L
(m)
chk+1
f (k+1)
L2 (a;b)
(20)
L2 (a;b)
pi;1
L
pi;1
L
c1 h2 f (2)
L2 (a;b)
c2 h f (2)
L2 (a;b)
(21)
L2 (a;b)
L2 (a;b)
8k = 0; :::; mi
8i = 0; :::; n
(22)
n
X
k=0
n
X
b n;k (x)
f 0 (xk )H
(23)
(24)
k=0
donde:
Hn;k (x)
b n;k (x)
H
=
=
1
(x
2 (x
xk ) L2n;k (x)
Adicionalmente, si f 2 C 2n+2 [a; b] ; entonces: (8x 2 [a; b]) (9 (x) 2 (a; b)) tal que:
f (x) = pH (x) +
f (2n+2) ( (x))
(x
(2n + 2)!
x0 )2 (x
x1 )2
(x
xn )2
(25)
Los comandos de Matlab interp1; interp2 interpolan datos en 1 y 2 dimensiones en forma numrica aplicando
diferentes mtodos (lineal, spline cbico, Hermite cbico, etc): La instruccin polyf it calcula los coecientes
del polinomio de interpolacin de Lagrange y de aproximacin. Las instrucciones spline; csape; calculan en
forma numrica y detallada los polinomios de interpolacin por trazos: splines.
El comando interp1 permite interpolar datos unidimensionales:
yi = interp1(x; y; xi;0 metodo0 )
(26)
Descripcin
Interpolacin utilizando polinomios lineales por intervalo (Default)
Entrega el valor conocido ms cercano
Interpolacin utilizando splines cbicos
Interpolacin utilizando polinomios de Hermite cbicos por intervalo
Observaciones:
i) Los vectores x e y deben tener la misma dimensin.
ii) Para los mtodos 0 linear0 y 0 nearest0 ; todos los elementos del vector xi deben estar adentro del intervalo
de los valores del vector x. Para los mtodos 0 spline0 y 0 cubic0 , se puede extrapolar.
iii) El comando interp1 no entrega los coecientes del polinomio de interpolacin calculado de acuerdo al
mtodo seleccionado. Slo entrega la evaluacin del polinomio de interpolacin en los puntos xi:
Por ejemplo, para calcular la interpolacin lineal, de spline y de Hermite de la funcin f (x) = x sin(x2 ) en
el intervalo [0; 4] se debe ejecutar la secuencia de instrucciones:
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
x=[0:0.5:4];
y=x.*sin(x.^2);
xi=[0:0.1:4];
yil=interp1(x,y,xi,linear);
yis=interp1(x,y,xi,spline);
yic=interp1(x,y,xi,cubic);
plot(xi,yil,-k);
hold on
plot(xi,yis,-r);
plot(xi,yic,-g);
1.5
1
Interpolacin de f(x)
0.5
0
-0.5
-1
Lineal
Spline cbico
Hermite cbico
-1.5
-2
0.5
1.5
2
x
2.5
3.5
Figura 2. Interpolacin lineal, de spline, de Hermite de la uncin f (x) = x sin(x2 ) en [0; 4]:
El comando interp2 interpola datos bidimensionales en forma similar a interp1: Se utiliza de la siguiente
forma:
zi = interp2(x; y; z; xi; yi;0 metodo0 )
(27)
donde:
(x; y) : Malla bidimensional con los puntos conocidos de los ejes x; y:
z : Malla bidimensional con los puntos conocidos del eje z:
(xi; yi) : Malla bidimensional con los puntos que se quiere interpolar de los ejes x; y:
Los mtodos de interpolacin pueden ser:
Mtodo
0
linear0
0
nearest0
0
spline0
0
cubic0
Descripcin
Interpolacin utilizando polinomios lineales por intervalo (Default)
Entrega el valor conocido ms cercano
Interpolacin utilizando splines cbicos
Interpolacin utilizando polinomios de Hermite cbicos por intervalo
= meshgrid(ix : hx : fx ; iy : hy : fy )
[x; y]
= meshgrid(i : h : f )
[x; y]
= meshgrid(ux ; uy )
donde:
ix ; iy : Son los valores iniciales de las variables x; y
hx ; hy : Son los pasos de las variables x; y
fx ; fy : Son los valores nales de las variables x; y
Por ejemplo:
>> [x,y] = meshgrid(-1:0.5:1,0:0.25:1)
x =
-1.0000
-0.5000
0
0.5000
1.0000
8
(28)
-1.0000
-1.0000
-1.0000
-1.0000
y =
0
0.2500
0.5000
0.7500
1.0000
-0.5000
-0.5000
-0.5000
-0.5000
0
0
0
0
0.5000
0.5000
0.5000
0.5000
1.0000
1.0000
1.0000
1.0000
0
0.2500
0.5000
0.7500
1.0000
0
0.2500
0.5000
0.7500
1.0000
0
0.2500
0.5000
0.7500
1.0000
0
0.2500
0.5000
0.7500
1.0000
Si las variables x; y tienen igual rango y equiespaciado se utiliza: [x; y] = meshgrid(i : h : f ): Por ejemplo:
>> [x,y] = meshgrid(0:0.25:1)
x =
0
0.2500
0.5000
0
0.2500
0.5000
0
0.2500
0.5000
0
0.2500
0.5000
0
0.2500
0.5000
y =
0
0
0
0.2500
0.2500
0.2500
0.5000
0.5000
0.5000
0.7500
0.7500
0.7500
1.0000
1.0000
1.0000
0.7500
0.7500
0.7500
0.7500
0.7500
1.0000
1.0000
1.0000
1.0000
1.0000
0
0.2500
0.5000
0.7500
1.0000
0
0.2500
0.5000
0.7500
1.0000
Para construir una malla no equiespaciada se utiliza [x; y] = meshgrid(ux ; uy ) donde ux ; uy son los valores
a asignar a las variables x; y: Por ejemplo:
>> ux=[0 0.3 0.5 0.8]; uy=[0 0.1 0.3 0.7];
>> [x,y] = meshgrid(ux,uy)
x =
0
0.3000
0.5000
0.8000
0
0.3000
0.5000
0.8000
0
0.3000
0.5000
0.8000
0
0.3000
0.5000
0.8000
y =
0
0
0
0
0.1000
0.1000
0.1000
0.1000
0.3000
0.3000
0.3000
0.3000
0.7000
0.7000
0.7000
0.7000
Ejemplicaremos el comando interp2 calculando las interpolaciones nearest; linear; cubic de la funcin peaks
en el intervalo [ 3; 3] :
>> [x,y] = meshgrid(-3:0.5:3); z = peaks(x,y);
>> [xi,yi] = meshgrid(-3:0.25:3);
>> zi1 = interp2(x,y,z,xi,yi,nearest); zi2 = interp2(x,y,z,xi,yi,linear);
9
>>
>>
>>
>>
>>
>>
zi3 = interp2(x,y,z,xi,yi,cubic);
[xx,yy] = meshgrid(-3:0.1:3); zz = peaks(xx,yy);
subplot(2,2,1), surf(xx,yy,zz)
subplot(2,2,2), surf(xi,yi,zi1)
subplot(2,2,3), surf(xi,yi,zi2)
subplot(2,2,4), surf(xi,yi,zi3)
Funcin "peaks"
10
10
-10
5
-10
5
0
y
-5
-5
-10
5
0
-5
-5
-10
5
5
-5
-5
10
0
y
0
y
-5
-5
(29)
< xn
< xn = b
= f (xn
10
1 ); yn
= f (xn )
Luego, S(x) es un polinomio cbico en el subintervalo [xk ; xk+1 ] denotado por Sk (x) para k = 0; 1; : : : ; (n
1), y denido por:
8
S0 (x) = a0 + b0 (x x0 ) + c0 (x
>
>
>
>
>
< S1 (x) = a1 + b1 (x x1 ) + c1 (x
S2 (x) = a2 + b2 (x x2 ) + c2 (x
S(x) =
>
>
>
>
>
:
Sn 1 (x) = an 1 + bn 1 (x xn
x0 )2 + d0 (x
x1 )2 + d1 (x
x2 )2 + d2 (x
..
.
1)
+ cn
1 (x
x0 )3
x1 )3
x2 )3
xn
2
1)
x 2 [x0 ; x1 ]
x 2 [x1 ; x2 ]
x 2 [x2 ; x3 ]
..
.
+ dn
1 (x
xn
3
1)
x 2 [xn
(30)
1 ; xn ]
(31)
(32)
(33)
(34)
v) Condiciones de frontera:
(a) Natural, Libre o Variacional:
S 00 (x0 ) = S 00 (xn ) = 0 , c0 = cn = 0
(35)
S (xn )
= f 00 (x0 )
(36)
00
= f (xn )
(c) Sujeta:
S 0 (x0 )
0
= f 0 (x0 )
(37)
S (xn )
= f (xn )
S0000 (x1 )
= S1000 (x1 )
Sn000 2 (xn 1 )
11
Sn000 1 (xn 1 )
(38)
(e) Peridica:
S 0 (x0 )
= S 0 (xn )
00
(39)
00
S (x0 )
= S (xn )
Se deducirn a continuacin las ecuaciones que deben satisfacer el spline, aplicando las condiciones i) - v)
para las condiciones de frontera natural y sujeta.
Aplicando la condicin i):
ak = Sk (xk ) = f (xk ) 8k = 0; 1; :::; n
(40)
Aplicando la condicin ii):
ak + bk (xk+1
xk ) + ck (xk+1
(41)
xk ) + dk (xk+1
xk ) = ak+1
Si se dene:
hk = (xk+1
xk ) 8k = 0; :::; n
(42)
se obtiene:
ak + bk hk + ck h2k + dk h3k = ak+1
8k = 0; :::; n
(43)
bk + 2ck hk +
3dk h2k
(44)
= bk+1
(45)
ck + 3dk hk = ck+1
Despejando dk de (45):
1
(ck+1
3hk
y sustituyendo en (43) y (44) se obtienen las ecuaciones:
dk =
Si se reemplaza bk y bk
ak )
h2k
3
(46)
8k = 0; :::; n
8k = 0; :::; n
(47)
(48)
de (47) se obtiene:
bk
(ak+1
(ak
bk
(ak+1
ck )
1
hk
1
hk
1
1)
hk
ak )
ak
(ck+1 + 2ck )
(ck + 2ck
1
hk
3
1)
8k = 0; :::; n
hk
3
(49)
8k = 1; :::; n
bk = bk 1 + (ck + ck 1 )hk
1
hk
(ck+1 + 2ck )
= (ak ak 1 )
3
hk
(ck + 2ck
1 )hk 1
+ (ck + ck
8k = 1; :::; n
(ck + 2ck
1 )3hk 1
12
= (ak+1
1)
1
hk
3
ak )
+ (ck + ck
3
hk
(ak
1 )hk 1
ak
1)
3
hk
(50)
3
3
(ak ak 1 )
8k = 1; :::; n 1
(51)
hk
hk 1
A este sistema de (n 1) ecuaciones lineales se deben agregar las condiciones de frontera libre o sujeta,
obtenindose un sistema tridiagonal de (n + 1) ecuaciones lineales para las (n + 1) incgnitas c0 ; c1 ; :::; cn :
Aplicando las condiciones de frontera Libre o Natural:
ck
1 hk 1
+ ck (2kk
se obtiene el sistema:
2
1
0
0
6 h0 2(h0 + h1 )
h
1
6
6 ..
.
.
.
.
6 .
.
.
6
4 0
hn 2
0
2(hn
c0
cn
32
0
0
..
.
..
.
+
hn
2
0
ak )
1 ) hn
1
Sn0 (xn )
c0
c1
..
.
76
76
76
76
76
5 4 cn 1
cn
(52)
7 6
7 6
7 6
7=6
7 6
5 6
4
0
3(a2 a1 )
h1
3(an an
hn 1
3(a1 a0 )
h0
..
.
1)
3(an
an
hn
2)
7
7
7
7
7
7
5
= f 0 (x0 )
(53)
(54)
= f (xn )
se obtiene el sistema:
2
6
6
6
6
6
4
2h0
h0
..
.
0
0
h0
2(h0 + h1 )
..
.
0
h1
..
.
hn
..
.
2(hn 2 + hn
hn 1
32
0
0
..
.
1)
hn
2hn
1
1
c0
c1
..
.
76
76
76
76
76
5 4 cn 1
cn
6
7 6
7 6
7 6
7=6
7 6
5 6
4
Ambos sistemas tiene solucin nica si y slo si: x0 = a < x1 < x2 <
3(a1 a0 )
h0
3(a2 a1 )
h1
3(an an
hn 1
0
1)
3f (xn )
< xn
3f 0 (x0 )
3(a1 a0 )
h0
..
.
3(an
an
hn
an
2
1)
3(an
hn
< xn = b:
2)
7
7
7
7
7 (55)
7
7
5
0
1
1
4
0
0
0
1
4
1
1
4
0
0
1
4
0
0
0
1
0
1
4
32
76
76
76
76
54
c0
c1
c2
c3
c4
7 6
7 6
7=6
7 6
5 4
13
0 p
12(1
2)
p
12( 2 p2)
12(1
2)
0
7 6
7 6
7=6
7 6
5 4
0
4: 970 6
7: 029 4
4: 970 6
0
3
7
7
7
7
5
(57)
2
6
6
6
6
4
c0
c1
c2
c3
c4
7 6
7 6
7=6
7 6
5 4
0
3: 672 3
5: 193 3
3: 672 3
0
3
7
7
7
7
5
(58)
Finalmente se tienen que determinar los bk y dk : Para ello se utilizan las ecuaciones:
Luego:
bk
(ak+1
ak )
dk
1
(ck+1
3hk
1
hk
(ck+1 + 2ck )
ck )
8k = 0; :::; n
3 2
(a1 a0 ) h10
b0
6
6 b1 7 6 (a2 a1 ) h1
6
7
1
4 b2 5 = 6
4 (a3 a2 ) h12
b3
(a4 a3 ) h13
2
3 2 1
d0
3h0 (c1
6 d1 7 6 1 (c2
6
7 6 3h1
4 d2 5 = 4 1 (c3
3h2
1
d3
3h (c4
2
hk
3
8k = 0; :::; n
(59)
3
3:1344
7 6
7 6 2:2164 7
7
7=4
5
0
5
2:2164
(60)
1
3
3
4:8963
2:0281 7
7
2:0281 5
4:8963
(61)
1
2
1
4
6
6
6 0
6
4 0
0
Cuya solucin es:
1
4
1
1
4
0
0
0
1
4
1
1
4
0
0
1
4
1
1
4
0
0
0
1
4
1
2
32
76
76
76
76
54
2
6
6
6
6
4
c0
c1
c2
c3
c4
c0
c1
c2
c3
c4
7 6
7 6
7=6
7 6
5 6
4
7 6
7 6
7=6
7 6
5 4
14
12( 22 p1)
12(1
2)
0 p
2)
12(1p
2
12( 2
1)
5: 193 3
3: 672 2
0
3: 672 2
5: 193 3
3
7
7
7
7
5
7 6
7 6
7 6
7=6
7 4
5
3: 514 7
4: 970 6
0
4: 970 6
3: 514 7
3
7
7
7
7
5
(63)
(64)
Finalmente se tienen que determinar los bk y dk : Para ello se utilizan las ecuaciones:
Luego:
bk
(ak+1
ak )
dk
1
(ck+1
3hk
1
hk
(ck+1 + 2ck )
ck )
8k = 0; :::; n
hk
3
8k = 0; :::; n
(65)
3 2
3 2
(a1 a0 ) h10 (c1 + 2c0 ) h30
b0
6 b1 7 6
(a2 a1 ) h11 (c2 + 2c1 ) h31 7
7 6
6
6
7=6
6
h2 7 = 4
4 b2 5 4 (a3 a2 ) 1
(c3 + 2c2 ) 3 5
h2
b3
(a4 a3 ) h13 (c4 + 2c3 ) h33
2
3 2 1
3 2
c0 )
d0
2:0281
3h0 (c1
6 d1 7 6 3h1 (c2 c1 ) 7 6 4:8963
6
7 6 1
7 6
4 d2 5 = 4 1 (c3 c2 ) 5 = 4 4:8963
3h2
1
d3
2:0281
c3 )
3h (c4
2
3
0
2:2164 7
7
3:1344 5
2:2164
3
7
7
5
(66)
(67)
4
8
10:2
5
10
10:3
15
6
13
10:4
7
8
16 18
14:5 15
9
21
15:4
3
10 11 12
25 30 365
15:5 14 5
(68)
1
h0
..
.
0
2(h0 + h1 )
..
.
6
6
6
6
6
4 0
0
0
h1
..
.
hn
..
2(hn
32
0
0
..
.
.
+
hn
2
0
1)
hn
1
c0
c1
..
.
76
76
76
76
76
5 4 cn 1
cn
7 6
7 6
7 6
7=6
7 6
5 6
4
0
3(a2 a1 )
h1
3(an an
hn 1
3(a1 a0 )
h0
..
.
1)
3(an
hn
an
2)
7
7
7
7
7
7
5
(69)
= xk+1 xk
yk+1 yk
=
hk
= 3( k
k
k
k
k
6 hk
6
4 k
k
6 hk
6
4 k
k
6 hk
6
4 k
1
1:1
1:2
12
1:1 = 11
12
( 11 4) =
2
2
0
0:7
2:8
0:7 = 4
4
2
=
0:4
3
2
( 15
2
15
1
4)
3
20
0:1
1
3
30
1
1
( 30 20 ) =
1
20
4:1
3
( 41
30
9
4
=
7
20
0:1
1
4
40
1
2
( 40 15 ) =
1)
2
2:2
1
5
2:2 = 11
5
12
( 11 11 ) =
5
3
=
0:1
1
2
20
1
1
( 20 10 ) =
8
3
=
96
11
(70)
13
40
21
11
6
3
=
3
10
41
30
1
30 )
10
5
1:5
5 =
0:2
2
=4
3
10
1
40 )
1
( 10
39
40
3
2
=
1
10
5
11 )
( 14
3
117
110
7
2
0:5
2 =
1
4
41
30 )
7
7
5
67
20
(71)
3
7
7
5
11
6
9
3
6 =
2
3
3
( 2 + 10 ) =
(72)
3
18
5
7
7
5
(73)
00
00
3
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
7
5
3
0
6 2: 482 7
6
7
6 0:188 8 7
6
7
6 0:193 2 7
6
7
6 0:071 97 7
6
7
6 0:169 7 7
6
7
6 0:500 9 7
6
7
6 0:500 7 7
6
7
6 0:077 07 7
6
7
6 0:039 77 7
6
7
60:000 133 47
6
7
4 0:163 7 5
0
(74)
= ak + bk (x
= yk
xk )2 + dk (x xk )3
hk
1
(ck+1 + 2ck )
ak )
hk
3
xk ) + ck (x
bk = (ak+1
16
(75)
ck+1 ck
dk =
3hk
x 2 [2; 2:7]
x 2 [2:7; 3:8]
x 2 [3:8; 6]
x 2 [6; 8]
x 2 [8; 10]
x 2 [10; 13]
x 2 [13; 16]
x 2 [16; 18]
x 2 [18; 21]
x 2 [21; 25]
x 2 [25; 30]
x 2 [30; 36]
6) Ahora, se tabulan los datos de la parte inferior del escarabajo. Dada su forma, se interpolar por
trazos usando polinomios de grado 1 y 2:
xk
yk
2
5
3
4
7
7:9
12 36
3:8 5
(x 2)
3)
+4
= x+7
3
3 2
7)(x 12)
(x 3)(x 12)
(x
f1 (x) =
+ 7:9
+ 3:8
7)(3 12)
(7 3)(7 12)
(12
(x 36)
(x 12)
f2 (x) = 3:8
+5
= 0:05x + 3: 2
(12 36)
(36 12)
f0 (x)
(x
2
(x
4
(3
(76)
3)(x 7)
=
3)(12 7)
3: 113
x 2 [2; 3]
x 2 [3; 12]
x 2 [12; 36]
17
3:(77)
113
(78)
f (j)
El valor de las constantes
0
(j)
Sf
jh
4 j
f (4)
para j = 0; 1; 2; 3
(79)
es igual a:
=
=
5
384
0
1@
2
min
i=0;:::;n 1
1
24
3
8
(80)
min
h
(xi+1
xi )
i=0;:::;n 1
(xi+1
h
xi )
1
A
Teorema 8 Sea r 2 C 2 [a; b] una funcin que satisface las condiciones de interpolacin sujetas en los puntos
x0 = a < x1 < x2 <
< xn 1 < xn = b para una funcin f :
r(xk )
0
r (x0 )
= f (xk )
0
8k = 0; 1; :::; n
0
(81)
Entonces, si Sf es la spline sujeta de f calculada en los puntos (x0 ; f (x0 )); (x1 ; f (x1 )); :::; (xn ; f (xn )):
Zb
2
Sf00 (x)
Zb
dx
jr00 (x)j dx
(82)
00
f (x)
2
Sf00 (x)
Zb
dx
jf 00 (x)
p00S (x)j dx
(83)
(84)
donde dl; dr son los valores de la derivada en el extremo izquierdo y derecho del intervalo y pp es una
estructura de polinomio por trazo que contiene:
- Los puntos x denominados por Matlab breaks
18
(85)
- La cantidad de intervalos l
- El orden de las splines: k = 4
- La dimensin de las splines: d = 1
Por ejemplo, la secuencia de comandos:
>> x=[0:0.5:4]; y=x.*sin(x);
>> pp=spline(x,[1 y -1])
pp =
form: pp
breaks: [0 0.5000 1 1.5000 2 2.5000 3 3.5000 4]
coefs: [8x4 double]
pieces: 8
order: 4
dim: 1
calculan la spline cbica de la funcin f (x) = x sin(x) en el intervalo [0; 4] utilizando una malla de puntos
equi-espaciados a distancia h = 0:5 y condiciones de borde S 0 (0) = 1; S 0 (4) = 1: Para evaluar la spline pp
en puntos distintos a los breaks se utilizan las instrucciones ppval o f nval:
>> xi=[0:0.25:4];
>> yi=ppval(pp,xi);
>> yi=fnval(pp,xi);
El comando csape, del Spline Toolbox, calcula la spline cbica con condiciones de borde generalizadas:
pp
S
(d0 )
(x0 )
(dn )
(86)
(xn ) = cbn
Por ejemplo, para calcular la spline de f (x) = x cos x2 con condiciones de borde y 0 (0) = 1; y 00 (6) = 146:26
se utiliza el comando csape de la siguiente forma:
>> x=[0:0.25:6]; y=x.*cos(x.^2);
pp=csape(x,[1 y 146.26],[1 2])
pp =
form: pp
breaks: [1x25 double]
coefs: [24x4 double]
pieces: 24
order: 4
dim: 1
19
6
Datos
Spline
f(x)=xcos(x )
2
-2
-4
-6
3
x
1.0000
1.2500
1.5000
1.7500
3.0000
3.2500
3.5000
3.7500
5.0000
5.2500
5.5000
5.7500
20
96.1197 -136.1198
19.0731
447.0089 -64.0300 -30.9643
-845.3628 271.2266
20.8348
912.5079 -362.7955
-2.0574
-695.5229 321.5854 -12.3599
345.3596 -200.0568
18.0222
18.8895
58.9629 -17.2512
l = 24
k = 4
d = 1
>> pp = mkpp(breaks,coefs);
3.0002
0.7629
-3.9956
4.9560
-3.9751
2.1664
-0.4353
Es posible realizar otras operaciones sobre la estructura pp como por ejemplo: gracar, calcular mnimos,
mximos y ceros, derivar, integrar, etc. Las funciones f nder y f nint devuelven la derivada e integral de la
spline en la forma pp.
>>
>>
>>
>>
>>
fnplt(pp)
[minval,minx] = fnmin(pp,[c d])
z = fnzeros(pp,[a b])
der_pp = fnder(pp,dorder)
int_pp = fnint(pp)
(87)
archivo0 : Nombre del archivo Excel del cual se importarn los datos.
planilla0 : Nombre de la planilla u hoja que especica desde donde se importarn los datos.
rango0 : Regin de la planilla de la cual se importarn los datos. Se ocupa la notacin de Excel, por
ejemplo: 0 C2 : E50 .
0
f unction_handle0 : Referencia a una funcin que se quiere aplicar antes de asignar los valores a var1:
Esta funcin tiene como output: var1; var2:
Los outputs de esta instruccin son:
var1 : Datos importados en formato double, excepto en las casillas dentro del rango importado que
estn vacias o tengan texto. En este caso, se asigna el valor 0 N AN 0 :
21
text : Variable tipo cell array que contiene todas las casillas con texto dentro del rango importado.
cell_array : Variable tipo cell array que contiene todas las casillas dentro del rango importado, nmericas o de texto.
var2 : Segundo output de la funcin 0 f unction_handle0 :
Por ejemplo:
>> [var1,text,cellarray]=xlsread(datos.xls,Hoja1,A1:B4)
var1 =
1.0000
0.1100
2.0000
0.2200
3.0000
0.3300
text = datos_x
datos_y
cellarray =
datos_x
datos_y
1]
[ 0.1100]
2]
[ 0.2200]
3]
[ 0.3300]
Para escribir datos a un archivo Excel, este (en el caso que exista) debe estar visualizado en el Current
Directory de Matlab, y luego utilizar el siguiente comando:
xlswrite(0 archivo0 ; variable;0 planilla0 ;0 rango0 )
(88)
Observaciones:
- En el caso que el archivo no exista, se crea un archivo con el nombre especicado. En el caso que
la planilla no exista, se crea una planilla con el nombre especicado.
- En el caso que el rango especicado tenga dimensin menor que el de la variable, entonces se
copian en el archivo solo los datos en el rango.
3) Utilizando los datos importados a las variables x; y y una malla ms na de puntos xi; calcule la
interpolacin por trazos utilizando los mtodos: lineal, cbico y spline cbico.
Graque estas 3 interpolacines en un msmo grco, destacando los datos importados. Exporte la
interpolacin en el mismo archivo Excel, en la planilla 0 Spline0 . Incluya en el informe los comandos
que utiliz para hacer este clculo, como tambin los resultados y grcos generados.
4) Un spline curtico S(x) es un polinomio de grado 4 denido por trazos, que interpola datos o una
funcin y = f (x) en el intervalo [x0 ; xn ]: Para contruir la spline slo se necesitan (n + 1) puntos (xk ; yk )
tales que: x0 = a < x1 <
< xn 1 < xn = b; y0 = f (x0 ); y1 = f (x1 ); :::; yn = f (xn ): El polinomio
S(x) ser denotado por Sk (x) en el subintervalo [xk ; xk+1 ] para k = 0; 1; : : : ; n 1 :
Sk (x) = ak + bk (x
xk ) + ck (x
xk )2 + dk (x
xk )3 + ek (x
xk )4
8x 2 [xk ; xk+1 ]
(89)
(a) Determine la cantidad de ecuaciones que se necesitan para calcular en forma nica un spline curtico que interpola los puntos (x0 ; y0 ); :::; (xn ; yn ):
Determine las condiciones que debe vericar el spline curtico. Puede utilizar 2 tipos de condiciones de borde.
22
(b) Determine en forma explcita las ecuaciones que debe vericar el spline curtico. Despeje todos
los coecientes en funcin de uno solo. Construya un sistema lineal para estos coecientes.
(c) Programe la funcin spline_cuartica.m que reciba como input los puntos (x0 ; y0 ); :::; (xn ; yn ) y
entrega como resultado
i) Un arreglo s con los coecientes de la spline curtica ordenados de mayor a menor potencia:
2
3
e0
d0
c0
b0
a0
6 e1
d1
c1
b1
a1 7
6
7
(90)
s=6 .
..
..
..
.. 7
4 ..
.
.
.
. 5
en 1 dn 1 cn 1 bn 1 an 1
ii) El error de aproximacin en el intervalo [a; b], en el caso que los datos provengan de una
funcin y = f (x):
iii) El grco de la spline curtica calculado en una malla na de puntos denida en [x0 ; xn ]
La funcin spline_cuartica.m adicionalmente tiene que vericar la condicin: x0 < x1 <
< xn :
Si no se cumple, se debe imprimir un mensaje de error y salir del programa sin ejecutar las
instrucciones.
(d) Compare los resultados de las interpolaciones por trazos calculadas: splines lineal, cuadrticas,
cbicas y curticas en cuanto a:
i) Complejidad del mtodo: Cantidad de ops necesarias para obtener la solucin.
ii) Errores de aproximacin: Calidad de interpolacin.
Qu interpolacin se asemeja ms a la foto seleccionada ?
Hint: Para calcular la interpolacin por splines cuadrticas puede utilizar la funcin spline_cuadratica.m
que se adjunta.
Aproximacin polinomial
pm kF = min kf
q2Pm
qkF
(91)
m
X
j=0
23
j bm;j (x)
(93)
Los coecientes j se denominan los coecientes de Bernstein o Bzier. Para una funcin f contnua la
aproximacin polinomial pf;Bm (x) de Bernstein de grado m en el intervalo [0; 1] se dene como:
pf;Bm (x) =
m
X
j
m
bm;j (x)
(94)
j=0
Luego:
kf
pf;Bm k1 = min kf
q2Pm
qk1
(95)
pm kL2 (a;b)
c
min kf
qkL2 (a;b)
q2Pm
Zb
min
a0 ;a1 ;:::;am
(96)
m
X
f (x)
ak x
k=0
!2
dx
Dado que la funcin "C (a0 ; a1 ; :::; am ) es cuadrtica y convexa con respecto a los coecientes a0 ; a1 ; :::; am ,
para determinar el polinomio pm basta aplicar las condiciones de optimalidad de primer orden:
@"c
@a0
@"c
@a1
(97)
..
.
@"c
@am
x0 dx
x1 dx
x2 dx
6
6 Zab
Zab
Zab
6
1
2
6
x dx
x dx
x3 dx
6
6 a
a
a
6
..
..
..
6
.
.
6 Z .
Z b
Z b
4 b
xm dx
xm+1 dx
xm+2 dx
a
2
6
6
6
6
4
b3 a3
3
b4 a4
4
bm+1 am+1
m+1
bm+2 am+2
m+2
bm+3 am+3
m+3
a)
..
.
..
b2 a2
2
b3 a3
3
(b
..
.
..
.
xm dx
72
7 a0
7
m+1
6
x
dx 7
7 6 a1
7 6 ..
a
74 .
..
7
.
7 am
Z b
5
2m
x dx
Z
.
a
b
..
.
bm+1 am+1
m+1
bm+2 am+2
m+2
..
.
b2m+1 a2m+1
2m+1
32
76
76
76
74
5
a0
a1
..
.
am
2 Z
6
6
6
6
7
6
7
7 = 6
6
5
6
6
4
3
3
x0 f (x)dx 7
7
Zab
7
1
x f (x)dx 7
7
7
a
7
..
7
.
7
Z b
5
m
x f (x)dx
b
2 Z
x0 f (x)dx
6
6 Zab
6
7
6
x1 f (x)dx
7
6
7 = 6 a
6
5
..
6
.
6 Z
4 b
xm f (x)dx
3
(98)
7
7
7
7
7
7
7
7
7
5
Por ejemplo, si f (x) = sin( x) y se quiere determinar su aproximacin de mnimos cuadrados de grado 3
24
p3 (x) en [0; 1] :
32
a0
1
1=2 1=3 1=4
6 1=2 1=3 1=4 1=5 7 6 a1 7 6
7 6
6
76
4 1=3 1=4 1=5 1=6 5 4 a2 5 = 4 (
(
a3
1=4 1=5 1=6 1=7
2
a0
6 a1 7 6
6
7 6
4 a2 5 = 4
a3
1
3
1
3
1
3
2
2
2=
1=
4)=
6)=
2 Z
1
0
x sin(
6
6 Z0 1
6
6
x1 sin(
7 6
7 = 6 Z0 1
5 6
6
x2 sin(
6
6 Z0
4 1
x3 sin(
3
3
3
12 2 120
6
60 2 720 7
7=6
2
4
5
60
720
0
x)dx 7
7 2
7
x)dx 7
7 6
7=6
7 4 (
x)dx 7
7
(
7
5
x)dx
5: 046 5 10
4: 122 5
4: 122 5
0
2
2
2=
1=
4)=
6)=
7
7
5
3
3
3
7
7
5
(99)
(100)
f(x)=sin( x) vs p
0.8
0.6
0.4
0.2
-0.2
0.2
0.4
0.6
0.8
!(x) i (x)
0;
1 ; :::;
mg
j (x)dx
Zb
> 0 si i = j
si i =
6 j
!(x)
(101)
2
i (x)dx
pm kL2! (a;b)
c
min kf
q2Pm
min
a0 ;a1 ;:::;am
qkL2! (a;b)
Zb
a
25
!(x) f (x)
(102)
m
X
k=0
ak
!2
k (x)
dx
Nuevamente la funcin "c (a0 ; a1 ; :::; am ) es cuadrtica y convexa con respecto a los coecientes a0 ; a1 ; :::; am .
Para determinar el polinomio pm basta aplicar las condiciones de optimalidad de primer orden:
@"c
@a0
@"c
@a1
(103)
..
.
@"c
@am
b
2
0 (x)dx
!(x)
!(x) 0 (x) 1 (x)dx
6
aZ
6 Z b a
b
6
6
!(x)
(x)
(x)dx
!(x) 21 (x)dx
1
0
6
6 a
a
6
..
..
6
.
.
6 Z
Z
b
4 b
!(x) m (x) 0 (x)dx
!(x) m (x) 1 (x)dx
a
!(x)
!(x)
0
..
.
2
0 (x)dx
0
Z
b
2
1 (x)dx
!(x)
..
..
..
..
.
Z
0 (x) m (x)dx
72
7 a0
7
6
!(x) 1 (x) m (x)dx 7
7 6 a1
7 6 ..
a
74 .
..
7
.
7 am
Z b
5
2
!(x) m (x)dx
Zab
2 Z
6
6
6
6
6
6
6
6
6
4
..
0
b
!(x)
2
m (x)dx
72
7 a0
7
7 6 a1
76
7 6 ..
74 .
7
7 am
5
2 Z
2 Z
!(x)f (x)
6
6 Zab
6
7 6
!(x)f (x)
7 6
7=6 a
5 6
..
6
.
6 Z
4 b
!(x)f (x)
3
!(x)f (x)
6
6 Zab
6
7 6
!(x)f (x)
7 6
7=6 a
5 6
..
6
.
6 Z
4 b
!(x)f (x)
3
0 (x)dx
(104)
3
7
7
7
7
1 (x)dx 7
7
7
7
7
5
m (x)dx
(105)
ak =
8i = 0; 1; :::; m
(106)
Para construir un base ortogonal de polinomios en el intervalo [a; b] para una funcin de peso ! cualquiera
se aplica el siguiente teorema:
Teorema 9 El conjunto de polinomios f 0 ;
L2 (a; b) con respecto a la funcin de peso ! :
0 (x)
1 (x)
= x
k (x)
1 ; :::;
mg
(x
b1
bk )
(107)
k 1 (x)
26
ck
k 2 (x)
8k = 2; :::; m
0 (x)dx
7
7
7
7
1 (x)dx 7
7
7
7
7
5
m (x)dx
ck
(108)
8k = 2; :::; m
1 (x)
= x
2 (x)
3 (x)
4 (x)
1
3x2
1
2
1
2
1
8
5x
(109)
3x
35x4
30x2 + 3
(2k + 1)
x
k+1
k
k+1
k (x)
k 1 (x)
8k
(110)
dk
dxk
2k k!
x2
8k
(111)
1
i (x) j (x)dx
1
Si i = j
(i+ 12 )
0 en otro caso
(112)
1
X
k=0
donde:
fbk =
hf;
k
k iL2 ( 1;1)
k kL2 ( 1;1)
fbk
k (x)
(113)
f (x)
k (x)dx
= k+
1
2
k (x)dx
1
27
1
2
f (x)
1
k (x)dx
(114)
2
m f kL2 ( 1;1)
kf
Este polinomio
mf
mf
= min kf
qkL2 (
q2Pm
1;1)
(115)
m
X
k=0
Ms an:
fbk
k (x)
2
m f kL2 ( 1;1)
lim kf
m!1
(116)
=0
(117)
Si se considera la funcin de peso !(x) = p11 x2 y el intervalo [ 1; 1], el teorema anterior genera la base
ortogonal de Chebyshev, denidos recursivamente segn:
T0 (x)
T1 (x)
= x
Tk+1 (x)
1
(118)
2xTk (x)
Tk
1 (x)
8k = 1; :::; m
2j 1
2k
8j = 1; :::; k
(119)
j
k
T (b
xk;j ) = ( 1)
8j = 0; 1; :::; k
(120)
3) Sea pnL;T (x) el polinomio de Lagrange de grado n calculado en los ceros del polinomio de Chebyshev
Tn (x): Entonces, 8f 2 C n+1 [ 1; 1] :
max
x2[ 1;1]
f (x)
1
max f (n+1) (x)
+ 1)! x2[ 1;1]
pnL;T (x)
2n (n
(121)
Demostracin. Ver ref. [3]. La propiedad anterior (121) es la mejor cota de error que se puede alcanzar
utilizando la interpolacion de Lagrange.
Las funciones peridicas o muy similares a funciones trigonomtricas es posible aproximarlas con la base
trigonomtrica B m , que en el intervalo [ ; ] est denida como:
0 (x)
1
2
k (x)
cos(kx) k = 1; 2; :::; m
m+k (x)
sin(kx) k = 1; 2; :::; m
28
(122)
1
m:
m
X1
a0
Sm (x) =
+ am cos(mx) +
(ak cos(kx) + bk sin(kx))
2
(123)
k=1
1
2
cos(x)
4
cos(3x)
9
(124)
; ] es:
(125)
2.5
1.5
0.5
0
-3
-2
-1
0
x
; ]:
En el caso de conocer solo datos en la forma de puntos: (x0; y0 ); (x1 ; y1 ); :::; (xn ; yn ) aplicando la misma
metodologa anterior es posible determinar el polinomio que mejor los representa en el sentido de los mnimos
cuadrados discretos:
min
a0 ;a1 ;:::;am
"d =
n
X
(yi
pm (xi )) =
i=0
n
X
i=0
yi
m
X
k=0
ak xki
!2
(126)
Dado que la funcin "d es cuadrtica y convexa con respecto a los coecientes a0 ; a1 ; :::; am , para calcular el
29
(127)
..
.
@"d
@am
n
X
(n
+
1)
xi
6
6
i=0
6 X
n
X
6 n
6
xi
x2i
6
6 i=0
i=0
6
..
..
6
.
.
6
6 X
n
n
X
4
xm
xm+1
i
i
i=0
i=0
n
X
i=0
n
X
n
X
x2i
i=0
n
X
xm+1
i
x3i
i=0
i=0
..
.
n
X
xm
i
..
n
X
xm+2
i
i=0
..
.
x2m
i
i=0
7 a0
7
76
76
7 6 a1
76
76
76
7 6 ..
74 .
7
5 am
n
X
yi
6
6 i=0
7 6 X
7 6 n
7 6
xi yi
7 6
7 = 6 i=0
7 6
..
7 6
.
5 6
6 X
n
4
xm
i yi
i=0
3
7
7
7
7
7
7
7
7
7
7
7
5
(128)
El comando polyf it calcula el polinomio standard de aproximacin p de grado m en el sentido de los mnimos
cuadrados:
[p; S] = polyf it(x; y; m)
(129)
pm (xi ))
(130)
i=0
Por ejemplo, para calcular los polinomios de mnimos cuadrados de grado 4; 6 y 8 de la funcin f (x) =
x sin(x2 ) el intervalo [0; 4] utilizando una malla de puntos equi-espaciados a distancia h = 0:5, se debe
ejecutar la secuencia de comandos:
>> x=[0:0.5:4]; y=x.*sin(x.^2);
>> p4=polyt(x,y,4);
>> p6=polyt(x,y,6);
>> p8=polyt(x,y,8);
>> xf=[0:0.05:4]; yf=xf.*sin(xf.^2);
>> yy4=polyval(p4,xf); yy6=polyval(p6,xf); yy8=polyval(p8,xf);
>> yf=xf.*sin(xf.^2);
30
-1
-2
f(x)= xsin(x )
Polinomio de grado 4
Polinomio de grado 6
Polinomio de grado 8
-3
-4
0.5
1.5
2
x
2.5
3.5
5.8414
-3.6074
0.3913
-0.0057
-0.0022
-0.0006
-0.0001
0
0
-0.0011
-0.0006
-0.0003
-0.0001
0.0000
0
-0.0002
-0.0002
-0.0002
-0.0001
0.0001
-0.0001
i1) Puntero a la funcin .m que se aproximar. Este puntero es llamado en Matlab "function handle".
Luego, si por ejemplo la funcin es g.m el puntero se utiliza de la siguiente forma:
[o1; o2; o3] = aproximacion_polinomial(@g; i2; i3; i4)
(131)
c;
d:
32
80
Porcentaje de Recuperacin: p
70
60
50
40
30
20
10
0.5
1.5
2
2.5
Razn de Lixiviacin: r
3.5
33
Utilizando el curve tting tool cf tool del toolbox de curve tting determine un modelo lineal de los
datos (r; p) de la forma:
p(r) = 0 + 1 f1 (r) + 2 f2 (r) + 3 f3 (r)
(133)
donde i i = 0; :::; 3 son constantes y fi i = 0; :::; 3 son funciones que dependen solamente de r: El
modelo debe tener un coeciente de correlacin R2 0:98:
Incluya en el informe los programas .m, las pruebas realizadas, como tambin los resultados y grcos
generados. Comente los resultados obtenidos.
References
[1] Burden, R., J. D. Faires, Anlisis Numrico, Sptima Edicin, Thomson Learning, 2002.
[2] Quarteroni, A., R. Sacco, F. Saleri, Numerical Mathematics, Second Edition, Text in Applied Mathematics, Springer, 2007.
[3] Stoer, J., R. Burlisch, Introduction to Numerical Analysis, Second Edition, Springer, 1992.
34