Académique Documents
Professionnel Documents
Culture Documents
Interpolacin lineal
La interpolacin lineal es muy sencilla. Disponemos de pares de datos
(xk,yk) k=1,2...n. Queremos conocer el valor de ypara un valor cualesquiera
de x en el intervalo x1 a xn. Supongamos que x est en el intervalo (xk,xk+1) tal
como se muestra en la figura. Trazamos la recta que pasa por los puntos (xk,yk)
y (xk+1,yk+1), cuya ecuacin es
y=(xxk)yk+1(xxk+1)yk(xk+1xk)y=(xxk)yk+1(xxk+1)yk(xk+1xk)
plot(x,y,'bo','markersize',4,'markerfacecolor','b')
yy=polyval(p,xx); %polinomio
plot(xx,yy,'r')
y0=polyval(p,x0); %valores interpolados
plot(x0,y0,'ro','markersize',6,'markerfacecolor','r')
hold off
xlabel('x');
ylabel('y')
title('Interpolacin con un polinomio de tercer gardo')
Interpolacin de Lagrange
Queremos encontrar los coeficientes de un polinomio de grado N
a1xN+a2xN-1+...+aNx+aN+1
que pase por todos los pares de datos (x1,y1), (x2,y2), ...(xN+1,yN+1). Los
coeficientes se pueden obtener resolviendo el sistema de ecuaciones:
a1xN1+a2xN11+aNx1+aN+1=y1a1xN2+a2xN12+aNx2+aN+1=
y2.....a1xNN+1+a2xN1N+1+aNxN+1+aN+1=yN+1{a1x1N+a2x1N1+aNx1+aN+1=y1
a1x2N+a2x2N1+aNx2+aN+1=y2.....a1xN+1N+a2xN+1N1+aNxN+1+aN+1=yN+1
En forma matricial
xN1xN2...xNN+1xN11xN12...xN1N+1............x1x2...xN+111...1a1
a2...aN+1=y1y2...yN+1(x1Nx1N1...x11x2Nx2N1...x21...............x
N+1NxN+1N1...xN+11)(a1a2...aN+1)=(y1y2...yN+1)
0.3782
-1.4951
3.6430
(xxN+1)(x1x2)(x1x3)...(x1xN+1)y1+(xx1)(xx3)...(xxN+1)(x2x1)(x2x3)...
(x2xN+1)y2+...+(xx1)(xx2)...(xxN)(xN+1x1)(xN+1x2)...(xN+1xN)yN+1
Como puede probarse fcilmente este polinomio pasa por todos los puntos
(xi,yi).
x=[0.97 1.12 2.92 3.00 3.33 3.97 6.10 8.39 8.56 9.44];
y=[2.58 0.43 0.06 5.74 7.44 8.07 6.37 2.51 1.44 0.52];
yy=lagrange_3(x,y,1.0)
=
10.0725
yy=lagrange_3(x,y,2.0)
= -203.7000
-10
-20
-16
3.6430
1.8338
Splines
Vamos a explicar mediante un ejemplo el procedimiento de interpolacin
denominado "splines", para generalizarlo despus a cualquier conjunto de
pares de datos.
Dado el conjunto de pares de datos (x1,y1), (x2,y2), (x3,y3), (x4,y4), (x5,y5) puntos
de color rojo en la fihgura. Definimos la funcin S(x)
S(x)=s1(x)x1x<x2s2(x)x2x<x3s3(x)
x3x<x4s4(x)x4x<x5si(x)=ai(xxi)3+bi(xxi)2+ci(xxi)+di
i=1,2,3,4S(x)={s1(x)x1x<x2s2(x)x2x<x3s3(x)x3x<x4s4(x)
x4x<x5si(x)=ai(xxi)3+bi(xxi)2+ci(xxi)+dii=1,2,3,4
+2bii=1,2,3,4dsidx=3ai(xxi)2+2bi(xxi)+cid2sidx2=6ai(xxi)+2bii=1,2,3,4
x5x4)2+c4(x5x4)+d4=y5
2.
3.
{3a1(x2x1)2+2b1(x2x1)+c1=c23a2(x3x2)2+2b2(x3x2)+c2=c33a3(x4x3)2+2
b3(x4x3)+c3=c4
4.
5.
Supongamos que el espaciado entre dos puntos consecutivos es constante h=xixi-1, i=2,3,4,5.
=y3m4m36hh3+m32h2+c3h+y3=y4
Que nos permite despejar c1, c2, c3 en trminos de m1, m2, m3, m4, y1, y2, y3, y4
c1=y2y1hm2+2m16hc2=y3y2hm3+2m26hc3=y4y3hm4+2m36hc1=y2y1hm2+2m16h
c2=y3y2hm3+2m26hc3=y4y3hm4+2m36h
c4=y5y4hm5+2m46h
m1+4m2+m3=6h2(y12y2+y3)m2+4m3+m4=6h2(y22y3+y4)
m3+4m4+m5=6h2(y32y4+y5)410141014m2m3m4=6h2y12y2+
y3y22y3+y4y32y4+y5{m1+4m2+m3=6h2(y12y2+y3)m2+4m3+m4=6h2(y22
y3+y4)m3+4m4+m5=6h2(y32y4+y5)(410141014)
(m2m3m4)=6h2(y12y2+y3y22y3+y4y32y4+y5)
Caso general
En general, con n pares de datos tendremos el sistema
4100....01410...00141...00014.....................10000...4
m2m3m4m5...mn1=6h2y12y2+y3y22y3+y4y32y4
+y5y42y5+y6....yn22yn1+yn(4100...01410...00141...00014...0..........
.........000...14)
(m2m3m4m5...mn1)=6h2(y12y2+y3y22y3+y4y32y4+y5y42y5+y6....yn22yn
1+yn)
Fijamos los valores de los extremos del vector de las incgnitas m: m1=0, mn1=0, a continuacin, obtenemos mediante el operador divisin por la izquierda
los valores de m2, m3, ...mn-2, finalmente, se calculan:
a1=m2m16ha2=m3m26ha3=m4m36h....
an1=mnmn16ha1=m2m16ha2=m3m26ha3=m4m36h.... an1=mnm
n16h
b1=m12b2=m22b3=m32.... bn1=mn12b1=m12b2=m22
b3=m32.... bn1=mn12
c1=y2y1hm2+2m16hc2=y3y2hm3+2m26hc3=y4y3hm4+2m36h.....cn1=ynyn1hmn+
2mn16hc1=y2y1hm2+2m16hc2=y3y2hm3+2m26hc3=y4y3hm4+2m36h.....cn1
=ynyn1hmn+2mn16h
Codificacin
La funcin diag nos permite crear una matriz a partir de los vectores de sus
diagonales
A=diag(4*ones(3,1))+diag(ones(2,1),1)+diag(ones(2,1),-1)
A =
4
1
0
1
4
1
0
1
4
con los nueve puntos unidos mediante polinomios de tercer grado (en color
rojo) veremos que la curva interpolada y la exacta estn prximas.
Los puntos de color azul, son los nueve pares de datos, cada una de las curvas
de color rojo entre dos puntos azules consecutivos es un polinomio de tercer
grado que pasa por dichos puntos y cumple las condiciones de continuidad de
su derivada primera y segunda.
Comparacin
Funcin spline de MATLAB
Utilizamos la funcin spline de MATLAB, pero es posible que las condiciones
en los extremos que en el ejemplo anterior se han establecido en m1=0, mn-1=0,
sean ahora diferentes.
x=-4:4;
y=sin(x)./(1+x.^2);
%dibuja los puntos
hold on
plot(x,y,'o','markersize',4,'markeredgecolor','b','markerfacecolor','b')
xx=linspace(-4,4,300);
yy=spline(x,y,xx); %interpolacin
plot(xx,yy, 'r')
yy=sin(xx)./(1+xx.^2);
plot(xx,yy,'g') %funcin
hold off
grid on
xlabel('x')
ylabel('y')
title('Interpolacin por splines de MATLAB')
Interplacin de Lagrange
Ahora interpolamos mediante un polinomio de grado n-1 que pasa por los
nueve puntos (xi,yi) del ejemplo anterior
x=-4:4;
y=sin(x)./(1+x.^2);
%dibuja los puntos
hold on
plot(x,y,'o','markersize',4,'markeredgecolor','b','markerfacecolor','b')
n=length(x);
p=polyfit(x,y,n-1); %polinomio que pasa por los puntos
%p=lagrange_p(x,y); %se obtiene el mismo resultado
xx=linspace(-4,4,300); %superposicin de la curva
yy=polyval(p,xx);
plot(xx,yy, 'r')
yy=sin(xx)./(1+xx.^2);
plot(xx,yy,'g')
hold off
grid on
xlabel('x')
ylabel('y')
title('Interpolacin por Lagrange')
Aproximacin de funciones
p=polyfit(xx,yy,n);
x1=linspace(0,b,100);
y1=polyval(p,x1); %aproximacin mediante el polinomio p
y2=f(x1);
%funcin
hold on
plot(x1,y1,'b')
plot(x1,y2,'r')
plot(xx(xx>=0),yy(xx>=0),'ro','markersize',2,'markerfacecolor','r')
hold off
xlabel('x')
ylabel('y')
title('Interpolacin de una funcin')