Você está na página 1de 8

UNIDAD 4.

INTERPOLACION
1. Diferencia entre interpolación y regresión
 La regresión es el ajuste de los datos
experimentales a una función que describe el
modelo físico particular. Por ejemplo, en un
experimento de movimiento rectilíneo
uniforme, los datos experimentales (tiempo,
posición del móvil) se ajustan a una línea
recta, ya que la ecuación que describe el
movimiento rectilíneo uniforme es x=x0+v·t
 En la interpolación la función pasa por todos los
puntos.

2. Interpolación lineal
Para 2 puntos en general, la interpolación lineal también es
sencilla de entender y programar. Disponemos de pares de
datos (xk,yk) k=1,2...n. Queremos conocer el valor de y para
un valor cualquiera 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 ecuación es:

( x−x k ) y k +1−( x−x k +1) y k


y=
( x k+1−x k+1 )

Ejemplo:
%Datos: (0,0), (π/3, sin(π/3)), (2π/3, sin(2π/3)), (π, 0)
x=0:pi/3:pi; %datos
y=sin(x);
x0=[pi/6,pi/2,5*pi/6]; %interpolación lineal
y0=interpola_lineal(x,y,x0);
%y0=interp1(x,y,x0,'linear'); %esta es una función
MATLAB
hold on
fplot('sin(x)',[0,pi])
plot(x,y)
plot(x,y,'bo','markersize',3,'markerfacecolor','b')
plot(x0,y0,'ro','markersize',4,'markerfacecolor','r')
set(gca,'XTick',0:pi/6:pi)
set(gca,'XTickLabel',{'0','\pi/6','\pi/3','\pi/2','2\pi/3','5\pi/6', '\pi'})
hold off
grid on
xlabel('x');
ylabel('y')

title('Interpolación lineal')

3. Interpolación de Lagrange
Queremos obtener 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 siguiente
sistema de ecuaciones: (explicación en la pizarra)
En forma matricial, la matriz se conoce con el nombre de Vandermonde y se construye
con el comando vander(x), como podemos leer utilizando la ayuda (help) de MatLab
A=vander(v)
devuelve una matriz de Vandermonde cuyas columnas son las potencias del vector v,
esto es, A(i,j)=v(i)^(n-j).

Ejemplo:

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

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];
n=length(x); %número de pares de datos
%A=vander(x);
A=zeros(n); %líneas equivalentes a utilizar vander(x)
for j=1:n
A(:,j)=(x').^(n-j);
end
p=A\y' %sistema de ecuaciones lineales, y' es vector columna
p=
1.0e+04 *

0.0000
-0.0003
0.0057
-0.0595
0.3782
-1.4951
3.6430
-5.2142
3.9256
-1.1823

%p=polyfit(x,y,n-1) %n-1 es el grado del


polinomio
z=@(xx) polyval(p,xx);
hold on
plot(x,y,'bo','markersize',3,'markerfacecolor','b')
fplot(z,[x(1),x(end)])
xlabel('x')
ylabel('y')
grid on
title('Interpolación de Lagrange');
hold off

A continuación se programa la función denominada lagrange_3 que devuelva el valor


interpolado yy de xx cuando se le pasa los vectores x e y que guardan las abscisas y ordenadas
(xi,yi) de los datos. Ajusta mejor los datos que la función vista en la página 4 y que se llamaba:
interpola_lineal
Para xx=1.0 y xx=2.0
>> 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)
yy = 10.0725
>> yy=lagrange_3(x,y,2.0)
yy = -203.7000
-203.7000 1.8338
4. Splines. Interpolacion mediante la función ‘splines’

yi = spline(x,y,xi);

Ejemplo:
sin x
y= 2
x +1
x=-4:4;
f=@(x) sin(x)./(1+x.^2);
y=f(x);
%dibuja los puntos
hold on
plot(x,y,'bo','markersize',3,'markeredgecolor','b','markerfacecolor',
'b')

z=@(xx) spline(x,y,xx); %interpolación mediante spline


fplot(z,[-4,4],'r')
%fplot(f,[-4,4]) %función, se puede dibujar y comparer con
el ajuste
hold off
grid on
xlabel('x')
ylabel('y')
title('Interpolación por splines de MATLAB')

5. Interpolación con el comando de MatLab interp1. Extrapolación

>>yi = interp1(x, y, xi, method);

Siendo method una de las opciones siguientes:


 'linear' - linear interpolation
 'spline' - piecewise cubic spline interpolation (SPLINE)
Ejemplo:
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];
hold on
plot(x,y,'bo','markersize',4,'markerfacecolor','b') %Para marcar los puntos

z=@(xx) interp1(x,y,xx,'spline'); %mediante interp1-spline


fplot(z,[x(1),x(end)], 'b')
%g=@(xx) spline(x,y,xx); %interpolación mediante spline
%fplot(g, [x(1),x(end)],'r') %coinciden las gráficas azul y
roja
hold off

xlabel('x')
ylabel('y')
grid on
title('Interpolación splines')
%g=@(xx) spline(x,y,xx); %interpolación mediante spline
%fplot(g, [x(1),x(end)],'r')
EJERCICIOS
1.
XK 1 2 4 5
FK 0 2 12 21

Lo voy a resolver por el método de Lagrange


f=@(xx) lagrange_3(x,y,xx)
f=
function_handle with value:

@(xx)lagrange_3(x,y,xx)

>> hold on
>> plot(x,y,'bo','markersize',4,'markerfacecolor','b')
>> fplot(f,[1 7],'r')
>> f=@(x) ((6.7*(0.5-x))-x^1.5);
>> m=punto_medio(f, 0, 0.5, 1000)

m=

0.4542

>> f=@(x) ((6.7*(0.5-2*x))-2*x^1.5);


>> n=punto_medio(f, 0, 0.25, 1000)

n=

0.2332

>> %EJERCICIO ULTIMO UD2


>> syms x
>> syms y
>> syms z
>> F=@(x) [sin(x(1)*x(2))+exp(-x(1)*x(3))-0.9, x(3)*(x(1)^2+x(2)^2)^0.5 - 6.7,
tan(x(2)/x(1)) + cos(x(3)) + 3.2];
>> x0 =[1 2 2]; %valor inicial
>> [x,fval] = fsolve(F,x0)

Equation solved.

fsolve completed because the vector of function values is near zero


as measured by the value of the function tolerance, and
the problem appears regular as measured by the gradient.

<stopping criteria details>

x=

1.0325 2.0578 2.9101

fval =
1.0e-08 *

-0.0841 -0.0192 -0.7263

>> %EJERCICIO UD2


>> F(1)=@(x) [x(1)^2-x(2)^2+2*x(3)]

F=

function_handle with value:

@(x)[x(1)^2-x(2)^2+2*x(3)]

>> W=

Você também pode gostar