Anda di halaman 1dari 17

INTERPOLACIÓN POLINÓMICA Y

APROXIMACIÓN DE DATOS

Edwin Chávez Ramírez


Edwin Chávez Ramírez
UNMSM, 2018 - I
Edwin Chávez Ramírez
Octave, tiene implementada las funciones que aparecen en la tabla para
realizar la interpolación
El programa interpDemo.m, presenta el problema de interpolación de una
manera gráfica (figura); haciendo uso de las funciones mencionadas en la
tabla

function InterpDemo()
x=[0 1 4 6];
y=[1 -1 1 -1];

Edwin Chávez Ramírez


x0 = 0:0.10:6;
ylin = interp1(x,y,x0,'linear');
yspline = interp1(x,y,x0,'spline');
ycubic = interp1(x,y,x0,'cubic');
plot(x,y,'o');
hold on;%para colocar varios plot;por default es off
plot(x0,ylin,x0,yspline,x0,ycubic);
legend('dato','lineal','spline','cúbica',0);
%pos = 0,1,2,3,4,-1; % 0 = el mejor lugar o automático
title('Interpolación');
Edwin Chávez Ramírez
Existen dos métodos muy difundidos: el de Lagrange y de Newton.

Interpolación de Lagrange

Edwin Chávez Ramírez


Edwin Chávez Ramírez
Edwin Chávez Ramírez
Edwin Chávez Ramírez
Ejercicio: Haga un script que nos permita calcular Li(x0) y Pn(x0)
Solución:
x =[0 1 4 6];
y =[1 -1 1 -1];
x0=2;
L = zeros(4,1);

fprintf(' k x y L\n');
for k=1:4,

Edwin Chávez Ramírez


prod1=1;prod2=1;
for i=1:4,
if i~=k
prod1=prod1*(x0-x(i)); Ejercicio: Generalice el
prod2=prod2*(x(k)-x(i)); script de forma general
end
end
L(k)=prod1/prod2;
end
p = 0;
for k=1:4
p = p+L(k)*y(k);
fprintf('%5d%10.6f%10.6f%10.6f\n',k,x(k),y(k),L(k));
end
fprintf('p(%f)=%f \n',x0,p);
Algoritmo de Lagrange

Edwin Chávez Ramírez


Recordando

Los polinomios se representan en Octave por un vector fila de dimensión n+1


siendo n el grado del polinomio.

Dado un polinomio
x3+2x

Edwin Chávez Ramírez


se representa por
>> pol1=[1 0 2 0]

Un polinomio puede ser reconstruido a partir de sus raíces con el


comando poly
>> p=poly(raices) (da un vector fila)

Ejemplo1:
pol2=[2 4 0 1]; % definición del polinomio 2x3+4x2+1
raices=roots(pol2) % cálculo de sus raíces
pol2_n=poly(raices) % reconstrucción del polinomio
real(pol2_n) % ¿qué pasó?
Para calcular el valor de un polinomio p en un punto dado x basta con
utilizar el comando polyval
>>y=polyval(p,x)
Ejemplo3:
p=[1 –1 –1 1] % definición del polinomio x3-x2-x+1
polyval(p,2)
>>ans = 15

Edwin Chávez Ramírez


EJERCICIO: Diseñe una función que utilice los comandos poly, polyval y
calcule los coeficientes de un polinomio interpolante de Lagrange desarrollado,
es decir
P(x)=anxn+… + a1x + a0
Solución:
function p = lagrange(x,y) >> lagrange([0 1 4 6],[1 -1 1 -1])
n = length(x); ans =
p = zeros(1,n);
for j=1:n -0.16667 1.50000 -3.33333 1.00000
q = poly(x([1:(j-1), (j+1):n]));
L=q/polyval(q,x(j)); >>
p = p + L*y(j);
end
Edwin Chávez Ramírez
Para calcular los coeficientes usamos las diferencias divididas
Edwin Chávez Ramírez
Edwin Chávez Ramírez
Edwin Chávez Ramírez
Ejercicio:
Diseñe un script para poder hallar las diferencias divididas para el ejemplo
Solución:

x=[ 1 4 6 5];
y=[0 1.3862944 1.7917595 1.6094379];
D=zeros(4,4);
for i=1:4
D(i,1)=y(i);

Edwin Chávez Ramírez


end
for j=2:4
for i=j:4
D(i,j)=(D(i,j-1)-D(i-1,j-1))/(x(i)-x(i-j+1));
end
end
fprintf('\t x Diferencias Divididas\n');
fprintf('\t======');
for j=1:4
fprintf('==========');
end
fprintf('\n');
D=[x' D]

Anda mungkin juga menyukai