Documentos de Académico
Documentos de Profesional
Documentos de Cultura
xi -1 0 1
yi 13 7 9
a) Encontrar el spline cúbico natural que interpola estos datos, imponiendo las
condiciones requeridas y resolviendo el sistema.
b) Misma cuestión resolviendo previamente el sistema tridiagonal para el cálculo de
las derivadas segundas del spline en los nodos.
c) Calcular el spline “no nodo”, hacer una gráfica de nodos y del spline.
d) Dibujar el spline completo que interpola los datos, suponiendo que las derivadas
primeras del spline en los nodos inicial y final son -5 y 5, respectivamente.
2.- Se quiere construir la línea fronteriza entre dos poblaciones a partir de los datos que
figuran en la siguiente tabla:
xi 0 1 2 3 4 5 6 7
yi 0 25 34 72 115 92 71 65
a) Calcular el polinomio de interpolación que pasa por todos los puntos. Hallar la
ordenada del punto de abscisa 2.5. Representar los datos junto al polinomio que
los interpola, que definiría la frontera entre las poblaciones.
b) Utilizar un spline no nodo para perfilar la frontera. Hallar la ordenada del punto
de la misma de abscisa 2.5. Representar los datos junto al spline que los interpola
en la misma ventana de dibujo que el apartado a).
c) Utilizar un spline natural para perfilar la curva de separación entre las
poblaciones.
3.- Un robot debe tomar un objeto situado en la posición 1 y dejarlo en la posición 6 del
recinto esquematizado en la figura. Para ello recorre una trayectoria definida por los
puntos de la tabla, que tratan de evitar los obstáculos del recinto.
2 3 6 Paso 1 2 3 4 5 6
x 1 1 4 4 7 7
1 y 1 4 4 1 1 4
4 5
La trayectoria se obtiene interpolando los
puntos dados (x k , y k ) mediante funciones p y q
tales que (p(t), q(t)) es la posición del brazo en
el instante t ∈ [0,1] y (p(tk), q(tk)) = (x k , y k ) , siendo tk = 0.2 k, k = 0,1,…,5. Representar
gráficamente la trayectoria obtenida si p y q son:
5.- Se consideran los valores de la función y = arc tg x en los nodos x = -3, -2, …, 2, 3.
a) Interpolar estos puntos mediante un spline cúbico cuya derivada primera en los
extremos coincida con la derivada primera de la función.
b) Hallar el spline que pasa por dichos puntos y tiene derivada tercera en los nodos
-2 y 2 (es decir, las dos primeras piezas del spline son el mismo polinomio, al igual
que las dos últimas).
c) Compara ambas aproximaciones.
6.- La tabla siguiente refleja la demanda de energía eléctrica en España cada dos horas
de un día de invierno.
Hora 0 2 4 6 8 10 12
MW 31250 28000 26000 26000 34000 37500 38000
Hora 14 16 18 20 22 24
MW 35500 34500 38500 39500 36500 33000
a) Hallar el polinomio de grado 12 que interpola los valores dados. Analizar el
comportamiento del polinomio de interpolación.
b) Se propone mejorar la interpolación dividiendo el intervalo en dos, de 0 a 12 y de
12 a 24, y hallando un polinomio para cada intervalo. Representar los polinomios
obtenidos y comparar el resultado con el del apartado anterior.
c) Interpolar los datos con un spline cúbico y comparar con los ajustes anteriores.
x0 x1 x2 x3 x4
x 1 1.3 1.6 1.9 2.2
f (x) 0.7651977 0.620086 0.4554022 0.2818186 0.11036
a) Comparar las aproximaciones de f(1.5) utilizando polinomios de interpolación de
grado 1, 2, 3 y 4. b) Sabiendo que f(1.5) = 0.5118277, ¿con qué polinomio se ha obtenido
la mejor aproximación?
Hora 10 13 17
Temp. ºC 7 17 11
15.- Sea una función f(x) de la que se conoce su valor en los siguientes puntos:
x -2 -1 0 1
f(x) 6 2 1 0
a) Hallar el polinomio de interpolación que se ajusta a esta nube de puntos y
estimar el valor de f (0.5) utilizando dicho polinomio.
b) Hallar un spline cúbico completo que interpole esos datos, suponiendo que
f ’(-2)=5 y que f ’(1 ) = 4 . Estimar con este método el valor de f (0.5).
c) Dibujar, en la misma ventana, los nodos, el polinomio de interpolación y el
spline utilizados y comentar el resultado.
16.-Se consideran los valores de la función f(x) = 1/x en el intervalo [0.1, 10] tomando los
puntos:
(0.1, 10.0); (0.2, 5.0); (0.5, 2.0); (1.0, 1.0); (2.0, 0.5); (5.0, 0.2); (10.0, 0.1).
a) Interpolar estos puntos mediante un spline cúbico cuya derivada primera en los
extremos coincida con la derivada primera de la función.
b) Hallar el spline que pasa por dichos puntos y tiene derivada tercera en los nodos
0.2 y 5.0 (es decir, las dos primeras piezas del spline son el mismo polinomio, al igual que
las dos últimas).
c) Compara ambas aproximaciones, dibujando los dos splines en la misma ventana,
y comenta el resultado.
xi -2 -1 1 2
yi 10 4 6 3
23.- La tabla siguiente proporciona el número de viajeros que suben al metro en una
estación a determinada hora de la mañana:
hora 8 9 10 11 12 13 14
viajeros 41 35 21 9 11 17 32
Hallar el polinomio de Newton que interpola estos datos. ¿Qué número de viajeros se
estima que suben a la estación a las 10:30h?
24.- Se consideran los valores de la función f(x) = cos10(x) en los 9 puntos equidistantes
del intervalo [-4, 4] obtenidos mediante una partición del mismo.
a) Interpolar estos puntos mediante un spline cúbico cuya derivada primera en los
extremos coincida con la derivada primera de la función.
b) Hallar el spline que pasa por dichos puntos y tiene derivada tercera en los nodos -3 y
3 (es decir, las dos primeras piezas del spline son el mismo polinomio, al igual que las
dos últimas).
c) Representar y comparar ambas aproximaciones.
d) Hermite para los tres primeros nodos.
xi -1 0 1
yi 13 7 9
a) Encontrar el spline cúbico natural que interpola estos datos, imponiendo las
condiciones requeridas y resolviendo el sistema.
b) Misma cuestión resolviendo previamente el sistema tridiagonal para el cálculo de
las derivadas segundas del spline en los nodos.
c) Calcular el spline “no nodo”, hacer una gráfica de nodos y del spline.
d) Dibujar el spline completo que interpola los datos, suponiendo que las derivadas
primeras del spline en los nodos inicial y final son -5 y 5, respectivamente.
Solución:
S 0 (x ) = a 0 (x − x 0 )3 + b 0 (x − x 0 )2 + c 0 (x − x 0 ) + d 0 x ∈ [x 0 , x 1 ]
a) S( x ) = ⇔
S1 (x ) = a 1 (x − x 1 ) + b1 (x − x 1 ) + c1 (x − x 1 ) + d 1 x ∈ [x 1 , x 2 ]
3 2
S (x ) = a 0 (x + 1) + b 0 (x + 1) + c 0 (x + 1) + d 0 x ∈ [− 1, 0]
3 2
S( x ) = 0
S1 (x ) = a 1 x + b1 x + c1 x + d 1
3 2
x ∈ [0, 1]
S 0 ' (x ) = 3a 0 (x + 1)2 + 2b 0 (x + 1) + c 0 x ∈ [− 1, 0]
S ' (x) =
S1 ' (x ) = 3a 1 x + 2b1 x + c1
2
x ∈ [0, 1]
S ' ' (x ) = 6a 0 (x + 1) + 2b 0 x ∈ [− 1, 0]
S ' ' (x) = 0
S1 ' ' (x ) = 6a 1 x + 2b1 x ∈ [0, 1]
Imponemos las 4n - 2 = 6 condiciones para que sea un spline cúbico:
S 0 (− 1) = d 0 = 13
S (0 ) = a + b + c + d = 7
0 0 0 0 0
S1 (0 ) = d 1 = 7
S1 (1) = a 1 + b1 + c1 + d 1 = 9
S 0 ' (0 ) = 3a 0 + 2b 0 + c 0 = S1 ' (0 ) = c1
S 0 ' ' (0 ) = 6a 0 + 2b 0 = S1 ' ' (0 ) = 2b1
S 0 ' ' (− 1) = 2b 0 = 0
S1 ' ' (1) = 6a 1 + 2b1 = 0
0 0 0 1 0 0 0 0 a0 13 a0 2
1 1 1 1 0 0 0 0 b0 7 b0 0
0 0 0 0 0 0 0 1 c0 7 c0 −8
0 0 0 0 1 1 1 1 d0 9 d0 13
= ⇒ = ⇒
3 2 1 0 0 0 −1 0 a1 0 a1 −2
6 2 0 0 0 −2 0 0 b1 0 b1 6
0 2 0 0 0 0 0 0 c1 0 c −2
1
0 0 0 0 6 2 0 0 d1 0
d
1 7
r = S ' ' (− 1) = 0
b) Por ser un spline natural, se verifica: 0
r2 = S ' ' (1) = 0
El sistema tridiagonal tiene n-1 = 1 ecuación con una incógnita, que es r1 = S ' ' (0 ) :
h 0 + h1 h
r1 = e1 − e 0 − 0 r0 ,
3 6
y − y 0 7 − 13 y − y1 9 − 7
siendo h i = 1 , e 0 = 1 = = −6 , e1 = 2 = = 2 . Sustituyendo:
x1 − x 0 0 +1 x 2 − x1 1 − 0
r1 = 2 − (− 6 ) − 0 = 8 ⇒ r1 = 12 = S ' ' (0 )
2 1
3 6
El spline tiene por ecuación:
S (x ) = a 0 (x + 1) + b 0 (x + 1) + c 0 (x + 1) + d 0 x ∈ [− 1, 0]
3 2
S( x ) = 0 ,
S1 (x ) = a 1 x + b1 x + c1 x + d 1
3 2
x ∈ [0, 1]
ri +1 − ri r y − yi ri +1 ri
siendo: a i = , b i = i , c i = i +1 − + h i , d i = y i .
6h i 2 hi 6 3
r1 − r0 r y − y 0 r1 r0
a0 = = 2 , b0 = 0 = 0 , c0 = 1 − + h 0 = −8 , d 0 = y 0 = 13 ;
6 2 h0 6 3
r2 − r1 r y − y1 r2 r1
a1 = = −2 , b1 = 1 = 6 , c1 = 2 − + h 1 = −2 , d 1 = y1 = 7 .
6 2 h1 6 3
Como en el spline no nodo los polinomios de los dos primeros intervalos son el mismo, se
trata simplemente del polinomio interpolador de grado 2. Los coeficientes vienen dados
por el campo “coefs” de la respuesta: 4(x + 1) − 10(x + 1) + 13 .
2
6
-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1
>> xx=-1:0.2:1; 11
>> zz=spline(x,[-5 y 5],xx);
10
>> plot(x,y,’*’,xx,zz)
9
6
-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1
yi 0 25 34 72 115 92 71 65
a) Calcular el polinomio de interpolación que pasa por todos los puntos. Hallar la
ordenada del punto de abscisa 2.5. Representar los datos junto al polinomio que
los interpola, que definiría la frontera entre las poblaciones.
b) Utilizar un spline no nodo para perfilar la frontera. Hallar la ordenada del punto
de la misma de abscisa 2.5. Representar los datos junto al spline que los interpola
en la misma ventana de dibujo que el apartado a).
c) Utilizar un spline natural para perfilar la curva de separación entre las
poblaciones.
Solución:
a)
>> x=[0:7];
>> y=[0 25 34 72 115 92 71 65];
>> polyfit(x,y,7)
ans =
Columns 1 through 6
-0.1079 2.4944 -22.1222 93.9861 -195.3722 181.5194
Columns 7 through 8
-35.3976 -0.0000
>> polyval(ans,2.5)
120
ans = 47.3867
>> % obien: 100
>> p=polyfit(x,y,7);
>> polyval(p,2.5) 80
ans = 47.3867
>> % Dibujo: 60
>> hold on
40
>> xx=0:0.2:7;
>> yy=polyval(p,xx);
20
>> plot(x,y,'*',xx,yy)
0
-20
0 1 2 3 4 5 6 7
>> x=[0:7];
>> ppval(spline(x,y),2.5)
ans = 48.8484
>> % o bien:
>> spline(x,y,2.5)
ans = 48.8484
>> % Dibujo:
>> xx=0:0.2:7;
>> zz=spline(x,y,xx);
>> plot(x,y,'*',xx,zz)
120
100
80
60
40
20
-20
0 1 2 3 4 5 6 7
n = 7, r0 = S’’(0) = 0, r7 = S’’(7) = 0.
Sistema tridiagonal para calcular ri, = S’’(xi) , i = 1, …, 6:
0
r3 e3 − e2
6 3 6
r =
h3 h3 + h4 h4 4 e4 − e3
0 0 0
6 3 6
r5 e5 − e4
h4 h4 + h5 h5 r
0 h
0 0 e6 − e5 − r7
6 6
6 3 6 6
h5 h5 + h6
0 0 0 0
6 3
h i = x i +1 − x i = 1, i = 0, …, 6.
y i +1 − y i
ei = , i = 0, …, 6
x i +1 − x i
xi 0 1 2 3 4 5 6 7
yi 0 25 34 72 115 92 71 65
ei 25 9 38 43 -23 -21 -6
2 1
0 0 0 0
3 6
1 2 1
0 r1
6 3 6
0 0
−16
r2
0
1 2 1
0 0
29
6 3 6 r3 5
⇔ r = ⇔
−
0 4
1 2 1 66
0 0
6 3 6 r5 2
1 2 1
15
0 0 0 r6
6 3 6
1 2
0 0 0 0
6 3
4 1 0 0 0 0 r1 −96 r1 = −35.6125
r = 46.4500
1 4 1 0 0 0 r2 174 2
0 1 4 1 0 0 r3 30 r3 = 23.8124
= ⇒
0 0 1 4 1 0 r4 − 396 r4 = −111.6998
0 0 0 1 4 1 r5 12 r5 = 26.9866
0 0 0 0 1 4 6
r 90 r6 = 15.7533
tales que Si (x ) = a i (x − x i ) + b i (x − x i ) + c i (x − x i ) + d i , x ∈ [x i , x i +1 ] ,
3 2
i = 0, …, 6.
Se obtiene el spline:
S0 ( x ) =
−5.9354 x 3 + 30.9354 x
2 3 6 Paso 1 2 3 4 5 6
x 1 1 4 4 7 7
1 y 1 4 4 1 1 4
4 5
4.5
3.5
2.5
1.5
0.5
0
-1 0 1 2 3 4 5 6 7 8 9
b)
>> % Splines no nodo
>> tt=0:0.01:1;
>> xx=spline(t,x,tt);
>> yy=spline(t,y,tt);
>> plot(x,y,'*',xx,yy)
4.5
3.5
2.5
1.5
0.5
0
-1 0 1 2 3 4 5 6 7 8 9
c)
>> % El interpolante pedido es el spline completo o de frontera sujeta
>> %en el que la derivada primera en los extremos es nula.
>> %Se obtiene con la orden "spline", añadiendo los valores de la
>> %derivada al vector de “imágenes".
>> tt=0:0.01:1;
>> xx=spline(t,[0 x 0],tt);
4.5
3.5
2.5
1.5
0.5
0
0 1 2 3 4 5 6 7 8
d) El spline pedido es el spline natural cuya derivada segunda se anula en los extremos
del intervalo.
Para calcularlo hay que resolver un sistema tridiagonal del tipo al utilizado en el ejercicio
2 apartado c). Saldría una gráfica muy similar a la del spline completo.
¿En qué casos la trayectoria no choca contra los obstáculos ni las paredes del recinto?
En el caso a) la trayectoria se sale de los límites del recinto.
El spline no nodo roza ligeramente las paredes del recinto.
Los splines con condiciones sobre la primera (spline completo) o segunda derivada (spline
natural) en los extremos se comportan mucho mejor, quedando alejados en todo momento de
los bordes y los obstáculos del recinto.
1) Con Matlab:
>> x=[0 1 3];
>> y=[1 5 -17];
>> polyfit(x,y,2)
ans = -5.0000 9.0000 1.0000 ( coeficientes del polinomio)
El polinomio pedido es:
P(x) = ‐5 x2+ 9 x + 1
2) A mano:
P(x) = L0(x) f(x0)+ L1(x) f(x1)+ L2(x) f(x2) =
( x − x 1 )( x − x 2 ) ( x − x 0 )( x − x 2 ) ( x − x 0 )( x − x 1 )
= y0 + y1 + y2
( x 0 − x 1 )( x 0 − x 2 ) ( x 1 − x 0 )( x 1 − x 2 ) ( x 2 − x 0 )( x 2 − x 1 )
= ‐5 x2+ 9 x + 1
b) Polinomio de Hermite:
Su grado es 2 n + 1 = 5
H(x) = a0 + a1 (x‐z0) + a2 (x‐z0)(x‐z1) + a3 (x‐z0) (x‐z1) (x‐z2) + a4 (x‐z0) (x‐z1) (x‐z2) (x‐z3) +
+ a5 (x‐z0) (x‐z1) (x‐z2) (x‐z3)(x‐z4)
z f(z) 1ª dif. divididas 2ª dif. divididas 3ª dif. divididas 4ª dif. divididas 5ª dif. divididas
z0=x0=0 f(z0)=f(x0)=1
z3=x1=1 f(z3)=f(x1)=5 f[z2, z3]=f '(x1)=5 f[z1, z2, z3]=1 f[z0, z1, z2, z3]=0
z4=x2=3 f(z4)=f(x2)=-17 f[z3, z4]=-11 f[z2, z3, z4]=-8 f[z1, z2, z3, z4]=-3 f[z0, z1, z2, z3, z4]= ‐1
z5=x2=3 f(z5)=f(x2)=-17 f[z4, z5]=f '(x2)=-15 f[z3, z4, z5]=-2 f[z2, z3, z4, z5]=3 f[z1, z2, z3, z4, z5]=2 f[z0, …, z5]=1
>> xx=[0:0.1:3];
0
>> yy=polyval(ans,xx);
>> plot(x,y,'*',xx,yy) -5
>> polyval(H,xx);
-20
>> zz=polyval(H,xx); 0 0.5 1 1.5 2 2.5 3
x0 x1 x2 x3 x4 x5 x6
-3 -2 -1 0 1 2 3
>> x=-3:3;
>> y=atan(x);
>> ps=spline(x,[0.1 y 0.1]);
Los coeficientes de cada pieza del spline están dados en la siguiente matriz:
>> ps.coefs
ans =
-0.0011 0.0430 0.1000 -1.2490
0.0994 0.0397 0.1827 -1.1071
-0.1126 0.3378 0.5602 -0.7854
-0.1126 -0.0000 0.8980 0
0.0994 -0.3378 0.5602 0.7854
-0.0011 -0.0397 0.1827 1.1071
>> yy=ppval(ps,xx);
0
>> plot(x,y,'*',xx,atan(xx))
-0.5
>> hold on
>> plot(x,y,'*',xx,yy,'--') -1
-1.5
-3 -2 -1 0 1 2 3
Los coeficientes de cada pieza del spline están dados en la siguiente matriz:
>> psnn.coefs
ans =
0.0784 -0.1454 0.2089 -1.2490
0.0784 0.0899 0.1534 -1.1071
-0.1084 0.3253 0.5686 -0.7854
-0.1084 0 0.8938 0
0.0784 -0.3253 0.5686 0.7854
0.0784 -0.0899 0.1534 1.1071
Dibujamos la función (trazo continuo rojo) y el spline no nodo (trazo discontinuo verde):
>> xx=-3:0.1:3;
1.5
>> plot(x,y,'*',xx,atan(xx))
1
>> hold on
>> yynn=ppval(psnn,xx); 0.5
>> plot(x,y,'*',xx,yynn,'--') 0
-0.5
-1
-1.5
-3 -2 -1 0 1 2 3
0.04
>> xx=-3:0.1:3;
0.03
>> dif1=atan(xx)-ppval(ps,xx);
0.02
>> plot(xx,dif1,':');hold on 0
-0.04
splines es muy similar. El spline -3 -2 -1 0 1 2 3
Hora 0 2 4 6 8 10 12
MW 31250 28000 26000 26000 34000 37500 38000
Hora 14 16 18 20 22 24
MW 35500 34500 38500 39500 36500 33000
a) Hallar el polinomio de grado 12 que interpola los valores dados. Analizar el
comportamiento del polinomio de interpolación.
b) Se propone mejorar la interpolación dividiendo el intervalo en dos, de 0 a 12 y de
12 a 24, y hallando un polinomio para cada intervalo. Representar los polinomios
obtenidos y comparar el resultado con el del apartado anterior.
c) Interpolar los datos con un spline cúbico y comparar con los ajustes anteriores.
Solución:
a) Utilizamos la función polyfit de Matlab:
>> h=[0:2:24];
>> MW=[31250 28000 26000 26000 34000 37500 38000 35500 34500 38500 39500 36500
33000];
>> p=polyfit(h,MW,12)
Avisa Matlab:
Warning: Polynomial is badly conditioned. Add points with distinct X values, reduce the
degree of the polynomial, or try centering and scaling as described in HELP POLYFIT. In
polyfit at 80.
Ocurre que los coeficientes del polinomio buscado varían mucho en magnitud unos de otros:
>> format long
>> p=polyfit(h,MW,12)
Warning: Polynomial is badly conditioned. Add points with distinct X values, reduce the
degree of the polynomial, or try centering and scaling as described in HELP POLYFIT. In
polyfit at 80
p=
1.0e+005 *
Columns 1 through 2
0.000000000003194 -0.000000000491669
Columns 3 through 4
0.000000033422949 -0.000001320675776
Columns 5 through 6
>> plot(h,MW,'*',hh,MMW) 3
2.5
1.5
0.5
0
0 5 10 15 20 25
plot(h,MW,'*',hh1,MMW1,':',hh2, 3
MMW2,'-') 2.8
>> plot(h,MW,'*',hh,MWs)
>> 3.5
2.5
0 5 10 15 20 25
Los coeficientes del spline están mejor escalados que los del polinomio y la gráfica sugiere
una evolución más razonable de la demanda eléctrica.
x0 x1 x2 x3 x4
x 1 1.3 1.6 1.9 2.2
f (x) 0.7651977 0.620086 0.4554022 0.2818186 0.11036
b) Sabiendo que f(1.5) = 0.5118277, los errores reales cometidos han sido:
Con p1:
>> abs(0.7848-0.5118277)
ans = 0.272972300000000
Con p2a:
>> abs(0.512471477777778-0.5118277)
ans = 6.437777777780207e-004 = 0.000643777777778
Con p2b:
>> abs(0.511285666666667-0.5118277)
ans = 5.420333333330252e-004 = 0.000542033333333
Con p3a:
>> abs(0.511812693827161-0.5118277)
ans = 1.500617283900496e-005 = 0.000015006172839
Con p3b:
>> abs(0.511830101234568-0.5118277)
ans = 2.401234567961375e-006 = 0.000002401234568
Con p4:
>> abs(0.511819946913580-0.5118277)
ans = 7.753086419981514e-006 = 0.000007753086420
Solución:
a) Al tener 3 nodos, el polinomio de interpolación será de grado 2 y ha de pasar por los
tres puntos:
P2 ( x ) = a2 x 2 + a1 x + a0
π π2 π
P2 − = a2 + a1 − + a0 =
−1
4 16 4
P2 ( 0=
) a=0 0
π π2 π
P2 =
a2 + a1 + a=
0 1
4 16 4
Por tanto, para hallar los coeficientes del polinomio, hay que resolver el sistema:
π2 π
− 1 0
16 4 a2 −1 a2
4 4
0 0 1 a1 = 1 ⇔ a1 = ⇒ P2 ( x ) = x ≈ 1.2732x
2 a 1 a π π
π π
1 0 0
0
16 4
) f [ x0 ] + f [ x0 , x1 ] ( x − x0 ) + f [ x0 , x1 , x2 ] ( x − x0 )( x − x1 )
P2 ( x =
f [ x1 , x2 ] − f [ x0 , x1 ]
x1 = 0 f [x1] = 0 =
f [ x0 , x1 , x2 ] = 0
x2 − x0
f [ x2 ] − f [ x1 ] 4
=
f [ x1 , x2 ] =
x2 − x1 π
π
x2 = f [x2] = 1
4
4 π π 4 π
Luego, P2 ( x ) =-1 + x + + 0 x + ( x − 0 ) =−1 + x +
π 4 4 π 4
π 4 π 1
c) P2 = ⋅ =
8 π 8 2
Con Matlab:
>> p=polyfit(x,y,2);
>> polyval(p,pi/8)
ans = 0.5000
Solución:
a) Polinomio de interpolación de grado 6 (puesto que hay 7 nodos):
π 1 1
f '(− 3 =
)
π
= = 4
2
cos (− )
2 1
1 3 2
'( x) (=
f= tgx ) ' ⇒
2
cos x f= π 1 1
'( ) = = 4
3 2 π
2
cos ( ) 1
3
2
>> sc=spline(x,[4 y 4])
sc =
form: 'pp'
breaks: [-1.0472 -0.7854 -0.5236 0 0.5236 0.7854 1.0472]
coefs: [6x4 double]
pieces: 6
order: 4
dim: 1
>> sc.coefs
ans =
π π π π π
3 2 3
S1 ( x ) = x + −1.7005 x + 1
1.2815 + .9718 1.0000,
x+ − x ∈ − , −
4 4 4 4 6
π π π π
3 2
S2 ( x ) = x + −0.6939
0.4418 x + +1 .3449
x + −0.5774, x ∈ − , 0
6 6 6 6
π
=S3 ( x ) 0.4418 0.0
x 3 − 000 0.9815
x2 + x, x ∈ 0,
6
π π π π π
3 2
( x ) 1.2815 0.6939
S 4= x− + x − + 1 .3449 0.5774
x− + , x∈ ,
6 6 6 6 4
π π π π π
3 2
5 ( x)
S= 5.5340 x − +1 .7005
x − + 1 .9718
x − + 1 .0000, x ∈ ,
4 4 4 4 3
>> sn=spline(x,y)
sn =
form: 'pp'
breaks: [-1.0472 -0.7854 -0.5236 0 0.5236 0.7854 1.0472]
coefs: [6x4 double]
pieces: 6
order: 4
dim: 1
>> sn.coefs
ans =
2.1084 -3.9131 3.6762 -1.7321
2.1084 -2.2571 2.0608 -1.0000
0.3827 -0.6012 1.3125 -0.5774
0.3827 0.0000 0.9977 0
2.1084 0.6012 1.3125 0.5774
2.1084 2.2571 2.0608 1.0000
π π π π π
3 2 3
S1 ( x ) = x + −2.2571 x +
2.1084 + 2.0608 1.0000,
x+ − x ∈ − , −
4 4 4 4 6
π π π π
3 2
S2 ( x ) = x + −0.6012
0.3827 x + +1.3125 x + − 0.5774, x ∈ − , 0
6 6 6 6
π
=S3 ( x ) 0.3827
x 3 −0.0000 0.9977
x2 + x, x ∈ 0,
6
π π π π π
3 2
4 ( x)
S= x− + x − + .3125 0.5774,
2.1084 0.6012 1 x− + x∈ ,
6 6 6 6 4
π π π π π
3 2
5 ( x)
S= x− + x− + x − + 1 .0000, x ∈ ,
2.1084 2.2571 2.0608
4 4 4 4 3
yi 2 6 5 10 67 45 23 5 9 1
a) Hallar el polinomio de interpolación.
b) Hallar un spline no nodo para estos datos.
c) Dibujar los dos polinomios en la misma ventana de dibujo. Comentar el resultado.
Solución:
a) Polinomio de interpolación de grado 9 (puesto que hay 10 nodos):
>> x=[1:10];
>> y=[2 6 5 10 67 45 23 5 9 1];
>> p=polyfit(x,y,9)
Warning: Polynomial is badly conditioned. Add points with distinct X values, reduce the
degree of the polynomial, or try centering and scaling as described in HELP POLYFIT.
> In polyfit at 75
p = 1.0e+04 *
-0.0000 0.0001 -0.0012 0.0141 -0.1040 0.4846 -1.4110 2.4463 -2.2596
0.8308
Luego, el polinomio de interpolación es:
p (x)= -0.0000 x9 + 0.0001 x8 - 0.0012 x7 + 0.0141 x6 - 0.1040 x5 + 0.4846 x4 - 1.4110 x3 +
2.4463 x2 -2.2596 x + 0.8308
b) Spline no nodo:
>> sn=spline(x,y)
sn =
form: 'pp'
breaks: [1 2 3 4 5 6 7 8 9 10]
coefs: [9x4 double]
pieces: 9
order: 4
dim: 1
>> sn.coefs
ans =
-2.5916 5.2748 1.3168 2.0000
-2.5916 -2.5000 4.0916 6.0000
23.9580 -10.2748 -8.6832 5.0000
-47.2405 61.5993 42.6412 10.0000
34.0041 -80.1223 24.1182 67.0000
Los coeficientes anteriores de cada tramo del spline Si, son coeficientes de las potencias de
(x-xi), i=0,…, 8.
Escribimos, por ejemplo, el primero de ellos:
( x − 1) + 0000, x ∈ [1, 2]
S0 ( x ) −2.5916 ( x − 1) + 5.2748 ( x − 1) + 1 .3168 2.
=
3 2
150
>> xx=[1:0.1:10];
>> yy=polyval(p,xx);
100
>> plot(xx,yy)
>> hold on
50
>> plot(x,y,'*')
>> zz=ppval(sn,xx);
0
>> plot(xx,zz,'--')
-50
-100
-150
1 2 3 4 5 6 7 8 9 10
Con el spline se han evitado las fluctuaciones del polinomio de interpolación que se producían
debido al grado elevado del polinomio, sobre todo en los subintervalos de los extremos.
Hora 10 13 17
Temp. ºC 7 17 11
S0 ( x ) = x 2 -1 = S0 ' ( x ) 2= x S0 '' ( x ) 2
S1 ( x ) =2 x -1 ⇒ S1 ' ( x ) =4 x ⇒ S1 '' ( x ) =4
2
S 2 ( x ) = −2 x +8x-5 S 2 ' ( x ) =−4 x +8 S 2 '' ( x ) =−4
2
1.6
1.4
1.2
0.8
0.6
0.4
1 1.5 2 2.5 3 3.5 4
En la parte central son bastante coincidentes las gráficas. En los nodos extremos presenta algo
menor fluctuación el spline no nodo.
>> pval(spc,0.5)
ans =
1.0167
c)
>> plot(x,y,'*')
>> hold on
>> xx=[-2:0.1:1];
>> yy=polyval(p,xx);
>> zz=ppval(spc,xx);
>> plot(xx,yy,xx,zz,'--')
0
-2 -1.5 -1 -0.5 0 0.5 1
La forma de la gráfica de f(x), al menos en los extremos, ha de ser más parecida a la del
spline completo (en trazo discontinuo) al haber obligado a que coincidan las derivadas del
spline con las derivadas de la función en los nodos inicial y final.
ans =
8
-158.1959 179.0980 -66.3278 10.0000
-158.1959 131.6392 -35.2541 5.0000 6
>>plot(x,y,'*',xx,yynn,'--')
c) El spline completo aproxima mejor la función, sobre todo en la parte derecha de la gráfica
en la que los nodos están más distanciados.
Solución:
a)
>> x=linspace(0,6*pi,10);
>> y =cos(x);
>> p=polyfit(x,y,9)
Warning: Polynomialisbadlyconditioned. Addpointswithdistinct X
values, reduce thedegree of thepolynomial, or try centering
andscaling as described in HELP POLYFIT.
> In polyfit at 76
p = Columns 1 through 7
0.0000 -0.0000 0.0002 -0.0063 0.1005 -0.8942 4.3257
Columns 8 through 10
-10.1479 8.0802 1.0000
>>xx=0:0.01:6*pi;
>>yy=polyval(p,xx);
>>plot(x,y,'*',xx,yy)
>>holdon
b)
>>polyval(p,11*pi/4)
ans = -0.6689
>> ((6*pi)^10)/(factorial(10))
ans = 1.5604e+06
c)
>>sp=spline(x,[0 y 0])
sp =
form: 'pp'
breaks: [1x10 double]
coefs: [9x4 double]
pieces: 9
order: 4
dim: 1
>> sp.coefs
ans =
U. D. de Matemáticas de la ETSITGC Asignatura: Cálculo II 42
Interpolación Polinómica
0.1633 -0.6839 0 1.0000
0.0000 0.3420 -0.7162 -0.5000
-0.1633 0.3420 0.7162 -0.5000
0.1633 -0.6839 0.0000 1.0000
0.0000 0.3420 -0.7162 -0.5000
-0.1633 0.3420 0.7162 -0.5000
0.1633 -0.6839 0.0000 1.0000
0.0000 0.3420 -0.7162 -0.5000
-0.1633 0.3420 0.7162 -0.5000
Cada fila de la matriz anterior contiene los coeficientes de cada uno de los polinomios
cúbicos S k , k=0,...,9 , que conforman el spline expresados en potencias de ( x − xk ) .
>>ppval(sp,11*pi/4)
ans = -0.6641
>>zz=ppval(sp,xx);
>>plot(xx,zz,'--')
>>rr=cos(xx);
>>plot(xx,rr,':')
3.5
2.5
1.5
0.5
-0.5
-1
-1.5
0 2 4 6 8 10 12 14 16 18 20
Se observa en la gráfica las fluctuaciones que muestra el polinomio interpolador, sobre todo
en los subintervalos extremos, problema que queda resuelto con el spline.
yi 1 e e2
haciendo los cálculos y el dibujo de los puntos y del polinomio con Matlab.
b) Interpolar el valor de f en 1/2.
c) Calcular el polinomio interpolador de Lagrange.
Solución:
a) P2(x) = a2 x 2 + a1 x + a0 . Como el polinomio ha de pasar por los nodos, se ha de verificar:
−1
a0 = 1 0 0 1 a2 1 a2 0 0 1 1 1.4762
a2 + a1 + a0= e ⇔ 1 1 1 a1 = e ⇒ a1 = 1 1 1 e = 0.2420
4 2 1 a e2 a 4 2 1 e 2 1
4a2 + 2a1 + a0 =e2 0 0
Obteniéndose: P2(x) = 1.4762 x 2 + 0.2420 x + 1 .
Estos cálculos se han realizado con Matlab:
>> A=[0 0 1;1 1 1;4 2 1];
>> B=[1;exp(1);exp(2)]; 8
>> A\B 7
ans = 6
1.4762 5
0.2420
4
1.0000
3
Con el comando polyfit de Matlab:
>> x=[0 1 2]; 2
>> p= polyfit(x,y,2) 0
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
ans =
1.4762 0.2420 1.0000
Dibujo:
>> hold on
>> plot(x,y,’*’)
>> xx=[0:0.1:2];
>> yy=polyval(p,xx);
>> plot(xx,yy)
1
b) Interpolar el valor de f en :
2
2
1 1 1
=f 1.4762 + 0.2420 + 1 ≈ 1.4901
2 2 2
>> polyval(p,1/2)
ans =
1.4901
c) P2(x) = L0(x) f(x0) + L1(x) f(x1) + L2(x) f(x2)= L0(x) + L1(x) e + L2(x) e 2
=L0 ( x)
( x −=x1 )( x − x2 ) ( x − 1)( x − 2 ) x 2 − 3 x + 2
=
( x0 − x1 )( x0 − x2 ) ( 0 − 1)( 0 − 2 ) 2
0.6
>> z=polyval(p,x); 0.5
0.4
>> hold on 0.3
>> plot(x,y,'*') 0.2
>> plot(x,z) 0.1
0
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
M
b) E = | f ( x) − Pn ( x) |≤ (b − a ) n +1 , siendo | f n +1) ( x) |≤ M .
(n + 1)!
Es inmediato que, en este caso, es | f 10) ( x) |≤ 1 para todo x ∈ [0, 1], luego:
1 1
E = | f ( x) − P9 ( x) |≤ (1 − 0)10 =< 2.8 ×10−7
10! 10!
xi -2 -1 1 2
yi 10 4 6 3
Nota:
f [ x2 ] − f [ x1 ] 4 − 2 2
=
f [ x1 , x2 ] =
x2 − x1 π
Luego, P2 ( x ) =0 +
2 2
( x − 0) +
(
8 1- 2
(
) − )
−
π 8 (1 − 2 ) 2 4 2 − 2
x +
x 0 x = π2 x
π π2 4 π
( )
π 8 1 − 2 π 4 2 − 2 π 4 2 − 1 0.5174
c) P2 = 2
2
+ = ≈
6 π 6 π 6 9
π π π π π
− 0 − −
d) E ≤ 6 4 6 2 ≈ 0.023924
6
3!
f [ x1 , x2 ] − f [ x0 , x1 ]
=
f [ x0 , x1 , x2 ] =
π x2 − x0
2
( )
x1 = f [x1] =
4 2 8 1- 2
=
π 2
Luego, P2 ( x ) =1 +
2 2 -4
( − ) +
(
8 1- 2
(
) −
) −
π 8 (1 − 2 ) 2 4 2 − 6
x 0 x 0 x = x + x +1
π π2 4 π2 π
c) P2=
( 2
)
π 8 1− 2 π 4 2 − 6 π 4 2 −1
+ =
+1 ≈ 0.5174
3 π 2
3 π 3 9
π π π π π
− 0 − −
d) E ≤ 3 4 3 2 ≈ 0.023924
3
3!
π π π π π
3 2
S1 ( x ) = x − −0.3706 x − 0.7049
0.1551 − x − +0.7071, x ∈ ,
4 4 4 4 2
0.8
0.6
0.4
0.2
-0.2
-0.4
-4 -3 -2 -1 0 1 2 3 4
>> plot(x,y,'*',xx,psbb)
1
0.8
0.6
0.4
0.2
-0.2
-0.4
-4 -3 -2 -1 0 1 2 3 4
>> plot(x,y,'*',xx,psaa,xx,psbb)
1
0.8
0.6
0.4
0.2
-0.2
-0.4
-4 -3 -2 -1 0 1 2 3 4
Se observa cómo las mayores diferencias se dan en los subintervalos extremos que es donde
difieren las condiciones entre ambos splines.
z f(z) 1ªdif div 2ªdif div 3ªdif div 4ªdif div 5ªdif div
-4 0.01423673073
0.1648358983
-4 0.01423673073 0.7252409034
0.8900768017 -2.904385383
-3 0.9043135325 -2.179144480 2.093206289
-1.289067679 1.282027195 -1.23814885
-3 0.9043135325 0.3849099101 -0.3830914165
-0.9041577689 0.5158443619
-2 0.0001557635998 0.9007542721
-0.003403496750
-2 0.0001557635998
H5(x) = 0.01423673073 + 0.1648358983·(x+4) + 0.7252409034·(x+4)2 - 2.904385383·(x+4)2
(x+3) 2.093206289·(x+4)2(x+3)2 - 1.238148852·(x+4)2 (x+3) 2 (x+2)
Sean t0 < t1 < . . . < tn, n+1 puntos (denominados nodos) y k un número natural. Una
función spline de grado k con nodos t0, t1, . . . , tn es una función S que satisface las
siguientes condiciones:
a) en cada intervalo [ti-1, ti], S es un polinomio de grado menor o igual a k,
b) S tiene una derivada de orden (k-1) continua en [t0, t1]
Por consiguiente S es un polinomio continuo a trozos de grado a lo sumo k, que tiene
derivadas continuas hasta el orden k-1.
Nodo
Interpolación
Obtención del valor aproximado de una magnitud o una función en un intervalo cuando
se conocen algunos de los valores que toma a uno y otro lado de dicho intervalo.
Interpolación de Newton
f [ x1 , xk ] f [ x0 , xk 1 ]
f [ x0 , x1 ,..., xk ]
xk x0
Interpolación de Hermite
Sea una función, f, con derivada continua en [a, b] y si x0, x1, . . . , xn son valores
distintos del intervalo [a,b] , existe un único polinomio de grado a lo sumo 2n+1, y se
denota H2n+1(x), tal que:
H2n+1(xi) = f(xi), H’2n+1(xi) = f ’(xi), i = 0, . . . , n.
H2n+1(x) es el polinomio de Hermite de grado 2n+1.
Matrices tridiagonales
En diversas aplicaciones nos encontramos con sistemas Ax=z donde A es cuadrada y sus
elementos son todos nulos excepto los de la diagonal principal y algunas de las paralelas a dicha
diagonal. Estas matrices se denominan matrices banda.
Un caso particular de matrices banda son las matrices tridiagonales.
Se llama matriz tridiagonal a las matrices de la forma siguiente:
a11 a12 0 0 0
a 21 a 22 a 23 0 0
0 a32 a33 0 0
A
0 0 0 a n 1,n 1 a n 1,n
0 0 0 a n ,n 1 a n ,n
Para este tipo de matrices hay algoritmos de factorización que simplifican el número de
operaciones a realizar, aprovechando la gran cantidad de ceros que aparecen siguiendo
patrones regulares. Estos métodos son preferibles frente a los que no tienen en cuenta la
tridiagonalidad de la matriz.