Está en la página 1de 4

%Interpolacion de Newton

function [c, T] = polynewton(x,y,n)


% Datos
% x es vector de las x
% y vector de las y
% n es el numero de puntos (puede omitirse en la entrada)
% Resultados
% c es el vector de coeficientes del polinomio interpolador
% T es la Tabla de diferencias divididas de Newton
x = x(:);
y = y(:);
if nargin == 2
n = length(x) - 1;
end
T = y(1:n+1);
for j = 2: n+1 % Filas
for k = 2:j
T(j,k) = (T(j,k-1)-T(j-1,k-1))/(x(j)-x(j-k+1));
end
end
% Los valores de la diagonal en la Tabla son los coeficientes del
% polinomio
c = flipud(diag(T));

end

function z = pneval(x,c,a)
% Datos
% x es el vector de las x
% c es el vector de coeficientes
% a es un vector que se evalua en c/u de sus componentes
% Resultados
% z es el valor evaluado
n = length(c) - 1;
z = c(1)*ones(size(a));
for k = 1 : n
z = z.*(a-x(n-k+1)) + c(k+1);
end

end
function z = lagrange(x,y,a)
% Valor en a del polinomio de Lagrange determinado por (x,y)
m = length(x);
z = zeros(size(a));
for i = 1:m
Li = 1;
for j = 1:m
if i ~= j
Li = Li.*(a-x(j))/(x(i)-x(j));
end
end
z = z + y(i)*Li;
end
end

function p = InterpNewton(x,y,x0)
% Datos
% x es el vector de las x
% y es el vector de las y
% n es el numero de datos o tamaño del vector
% x0 es el valor a interpolar
% Resultados
% F es la tabla de diferencias divididas finitas
% p es el valor interpolado obtenido por el metodo de Newton
n = length(x);
F = zeros(n,n);
for i = 1:n
F(i,1) = y(i);
end
for j = 2:n
k = j - 1;
for i = 1:n+1-j
F(i,j)=(F(i+1,k)-F(i,k))/(x(i+j-1)-x(i));
end
end
prod = 1;
suma = 0;
for j = 1:n
suma = suma + F(1,j)*prod;
prod = prod*(x0-x(j));
end
% Imprimiendo la tabla
fprintf('\n\tx\t\tF[x]\t\tDiferencias divididas\n');
fprintf('===========');
for j = 1 : n
fprintf('==========');
end
fprintf('\n');
for i = 1:n
fprintf('%10.6f',x(i));
for j = 1:n+1-i
fprintf('%10.6f',F(i,j));
end
fprintf('\n');
end
p= suma; % Valor interpolado

end
function p = InterpLagrange(x,y,x0)
% Datos
% x es el vector de las x
% y es el vector de las y
% n es el numero de datos o tamaño del vectos
% x0 es el valor a interpolar
% Resultados
% L es es el polinomio de Lagrange
% p es el valor interpolado obtenido por el metodo de Lagrange
n = length(x);
L = zeros(n,1);
fprintf('\tk\t\tx\t\t\ty\t\t\tL\n');
for k = 1:n
prod1 = 1;
prod2 = 1;
for i = 1 : n
if i ~= k
prod1 = prod1*(x0-x(i));
prod2 = prod2*(x(k)-x(i));
end
end
L(k) = prod1/prod2;
end
% Imprimiendo la tabla
p = 0;
for k = 1 : n
p = p + L(k)*y(k);
fprintf('%5d%12.6f%12.6f%12.6f\n',k,x(k),y(k),L(k));
end

end

También podría gustarte