Está en la página 1de 3

function [Ea] = interpol_new(x,y,x0)

%{
[1 4 6 5 3 1.5 2.5 3.5]
[0 1.3862944 1.7917595 1.6094379 1.0986123 0.4054641 0.9162907 1.2527630]
x0
%}
n=length(x)-1;
fdd=zeros(n+1);
for i=1:n+1
fdd(i,1)=y(i);
end
for j=2:n+1
for i=1:(n+2)-j
fdd(i,j)=(fdd(i+1,j-1)-fdd(i,j-1))/(x(i+j-1)-x(i));
end
end
xt=1;
yint(1)=fdd(1,1);
Ea(1)=1;
for k=2:n+1
xt=xt*(x0-x(k-1));
yint2=yint(k-1)+fdd(1,k)*xt;
Ea(k-1)=yint2-yint(k-1);
yint(k)=yint2;
end
Racum=1;
for k=1:n+1
Racum=Racum*(x0-x(k));
if k==n
Rn=fdd(i,j)*Racum;
end
end
clear all;close all;clc
fprintf('\nMÉTODOS NUMÉRICOS - INTERPOLACIÓN DE NEWTON')
fprintf('\nAlumno: GONZALO GUERRERO \n\n')
%% INPUTS

x=input('Valores de x: ');%[1 4 6 5 3 1.5 2.5 3.5]


y=input('Valores de y: ');%[0 1.3862944 1.7917595 1.6094379 1.0986123
0.4054641 0.9162907 1.2527630]
x0=input('Ingrese valor x0 a interpolar: ');% 2
format long
n=length(x)-1;
fdd=zeros(n+1);

%% TABLA DE DIFERENCIAS DIVIDADS fdd []


%1.data columna1 fdd :=[y']
for i=1:n+1 %fdd(:,1)=y(:)
fdd(i,1)=y(i);
end
%2.diferencias divididas
for j=2:n+1
for i=1:(n+2)-j
fdd(i,j)=(fdd(i+1,j-1)-fdd(i,j-1))/(x(i+j-1)-x(i));
end
end

%% VALOR INTERPOLADO Y ERROR APROXIMADO

xt=1; %acumulador
yint(1)=fdd(1,1);
Ea(1)=1;
for k=2:n+1
xt=xt*(x0-x(k-1));
yint2=yint(k-1)+fdd(1,k)*xt;
Ea(k-1)=yint2-yint(k-1);
yint(k)=yint2;
end

%% ERROR DE TRUNCAMIENTO
Racum=1;
for k=1:n+1
Racum=Racum*(x0-x(k));
if k==n
Rn=fdd(i,j)*Racum;%Rn=bn*(x-x0)*(x-x1)*(x-x2)..*(x-xn)
end
end
fprintf('\n El valor interpolado es f(%d): %5.6f\n',x0,yint2);
fprintf(' Error de truncamiento Rn:%5.6f\n',Rn);

%% PRINTEANDO TABLA..
fprintf('\n Grado\t\tX\t\t\tY\t\t\tYint\t\tEa\n')
for m=1:n+1
if m==n+1
fprintf('\n\t%1.0f\t%f\t%f\t%f\t NaN \n',m-1,x(m),y(m),yint(m));
else
fprintf('\n\t%1.0f\t%f\t%f\t%f\t%f ',m-1,x(m),y(m),yint(m),Ea(m));
end
end
Ea(n+1)=0;
%% FIGURA 18.9 CHAPRA pág.515
ejex =0:n;
EV = log(x0)-yint;
Eainv = interpol_new(fliplr(x),fliplr(y),2);
Eainv(n+1)=0;
figure (01)
plot(ejex,EV,'r--')
hold on
plot(ejex,Ea,'k')
hold on
plot(ejex,Eainv,'k')
grid on
xlabel('GRADO')
ylabel('ERROR')

También podría gustarte