Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
1. Use la interpolación de diferencias divididas para encontrar el polinomio que pasa por los
puntos.
(a) (0,1); (2,3); (3,0)
(b) (- 1,0) ;(2,1) ;(3.1); (5.2)
(C) (0, 2); (2,1); (4,4)
2. Utilice diferencias divididas de Newton para encontrar los polinomios de interpolación de
los puntos del ejercicio 1 y compruebe su concordancia con el polinomio de interpolación de
LaGrange.
SOLUCIÒN:
clear;clc
%Asignamos lo valores de las Variables "X" y "Y"
x=[0 2 3];y=[1 3 0];
%Asignamos otros nombres a nuestras valores iniciales para
utilizarlos como
%puntos de comparación al momento de querer evaluar el polimonio
en un
%valor determinado. (ver "Presentación de Resualtados")
xu=x;yu=y;
%Formamos una Matriz cero de la longitud del Vector "Y"
d=zeros(length(y));
% Se genera una Matriz cero donde la primera columna sea el
Vector "Y"
d(:,1)=y';
%Formacion de las diferencias divididas
for k=2:length(x)
for j=1:length(x)+1-k
d(j,k)=(d(j+1,k-1)-d(j,k-1))/(x(j+k-1)-x(j));
end
end
% Formación del Polinomio
for w=1:length(x)
dq=num2str(abs(d(1,w)));
if w>1
if x(w-1)<0
signo1='+';
else
signo1='-';
end
end
if d(1,w)<0
signo2='-';
else
signo2='+';
end
if w==1
acum=num2str(d(1,1));
elseif w==2
polinomioactual=['(x' signo1 num2str(abs(x(w-1)))
')' ];
actual=[dq '*' polinomioactual];
acum=[acum signo2 actual];
else
polinomioactual=[polinomioactual '.*' '(x' signo1
num2str(abs(x(w-1))) ')' ];
actual=[dq '*' polinomioactual];
acum=[acum signo2 actual];
end
end
% Presentación de Resultados
fprintf('\n Valores de X y Y \n');
disp(xu);
disp(yu);
fprintf('\n Polinomio de Interpolación : %s \n',acum);
x=input(' X interp = ');
if x>max(xu)||x<min(xu)
fprintf('\t Valor de "X" fuera de rango. El resultado puede
ser equivocado \n\a');
end
xinterp=x;
yinterp=eval(acum);
fprintf(' Y interp (%g) = %g \n',x,yinterp);
% Grafica de los puntos
fprintf('\n Pulse cualquier tecla para ver la gráfica de los
puntos\n');
pause
xg=linspace(min(xu),max(xu));
x=xg;yg=eval(acum);
plot(xg,yg,xu,yu,'xk',xinterp,yinterp,'sr');
grid,title('\bf DIFERENCIAS DIVIDIDAS')
a) Valores de X y Y
0 2 3
1 3 0
Polinomio de Interpolación : 1+1*(x-0)-1.3333*(x-0).*(x-2)
X interp = 0
Y interp (0) = 1
Pulse cualquier tecla para ver la gráfica de los puntos
b) Valores de X y Y
-1 2 3 5
0 1 1 2
X interp = 4
0 2 4
-2 1 4
X interp = 5
CODIGO DE LAGRANGE
clc
clear all
x=[0 2 3];
y=[1 3 0];
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
fprintf('\n Valores de X y Y \n');
disp(x);
disp(y);
p=polyfit(x,y,n-1) %n-1 es el grado del polinomio
xx=linspace(0.97,9.44,50); %interpolación
yy=polyval(p,xx);
hold on
plot(x,y,'o','markersize',4,'markerfacecolor','r')
plot(xx,yy,'b')
xlabel('x')
ylabel('y')
title('Interpolación de Lagrange');
hold off
Respecto
a) Valores de X y Y
0 2 3
1 3 0
-1 2 3 5
0 1 1 2
0 2 4
-2 1 4
13. Sea P(x) el polinomio de décimo grado que pasa a través de los 11 puntos ( - 5 . 5 ) . ( - 4 . 5
) . ( - 3 . 5 ) . ( - 2 . 5 ) . ( - 1 . 5 ) . (0 .5 ). (1 .5 ).(2 .5 ). (3.5). (4.5). (5,42).Calcule P(6 )
clear;clc
%Asignamos lo valores de las Variables "X" y "Y"
x=[-5 -4 -3 -2 -1 0 1 2 3 4 5];y=[5 5 5 5 5 5 5 5 5 5 42];
%Asignamos otros nombres a nuestras valores iniciales para utilizarlos
como
%puntos de comparación al momento de querer evaluar el polimonio en un
%valor determinado. (ver "Presentación de Resualtados")
xu=x;yu=y;
%Formamos una Matriz cero de la longitud del Vector "Y"
d=zeros(length(y));
% Se genera una Matriz cero donde la primera columna sea el Vector "Y"
d(:,1)=y';
%Formacion de las diferencias divididas
for k=2:length(x)
for j=1:length(x)+1-k
d(j,k)=(d(j+1,k-1)-d(j,k-1))/(x(j+k-1)-x(j));
end
end
% Formación del Polinomio
for w=1:length(x)
dq=num2str(abs(d(1,w)));
if w>1
if x(w-1)<0
signo1='+';
else
signo1='-';
end
end
if d(1,w)<0
signo2='-';
else
signo2='+';
end
if w==1
acum=num2str(d(1,1));
elseif w==2
polinomioactual=['(x' signo1 num2str(abs(x(w-1))) ')' ];
actual=[dq '*' polinomioactual];
acum=[acum signo2 actual];
else
polinomioactual=[polinomioactual '.*' '(x' signo1
num2str(abs(x(w-1))) ')' ];
actual=[dq '*' polinomioactual];
acum=[acum signo2 actual];
end
end
% Presentación de Resultados
fprintf('\n Valores de X y Y \n');
disp(xu);
disp(yu);
fprintf('\n Polinomio de Interpolación : %s \n',acum);
x=input(' X interp = ');
if x>max(xu)||x<min(xu)
fprintf('\t Valor de "X" fuera de rango. El resultado puede ser
equivocado \n\a');
end
xinterp=x;
yinterp=eval(acum);
fprintf(' Y interp (%g) = %g \n',x,yinterp);
% Grafica de los puntos
fprintf('\n Pulse cualquier tecla para ver la gráfica de los
puntos\n');
pause
xg=linspace(min(xu),max(xu));
x=xg;yg=eval(acum);
plot(xg,yg,xu,yu,'xk',xinterp,yinterp,'sr');
grid,title('\bf DIFERENCIAS DIVIDIDAS')
Valores de X y Y
-5 -4 -3 -2 -1 0 1 2 3 4 5
5 5 5 5 5 5 5 5 5 5 42
Polinomio de Interpolación :
5+0*(x+5)+0*(x+5).*(x+4)+0*(x+5).*(x+4).*(x+3)+0*(x+5).*(x+4).*(x+3).*(x+2)+0*(x+5).*(x+4).*
(x+3).*(x+2).*(x+1)+0*(x+5).*(x+4).*(x+3).*(x+2).*(x+1).*(x-
0)+0*(x+5).*(x+4).*(x+3).*(x+2).*(x+1).*(x-0).*(x-1)+0*(x+5).*(x+4).*(x+3).*(x+2).*(x+1).*(x-
0).*(x-1).*(x-2)+0*(x+5).*(x+4).*(x+3).*(x+2).*(x+1).*(x-0).*(x-1).*(x-2).*(x-3)+1.0196e-
005*(x+5).*(x+4).*(x+3).*(x+2).*(x+1).*(x-0).*(x-1).*(x-2).*(x-3).*(x-4)
X interp = 6
2. Utilice la fórmulas de la diferencia centrada de tres puntos para aproximar f’(0), donde f(x) =
exp(x) para (a) h=0.1 (b) h=0.01 (c) h=0.001.
CODIGO
global funcion
funcion=input('ingrese la funcion \n f(x)=','s');
x0=input('ingrese el valor del punto a evaluar \n x0 =');
h=input('ingrese los valores de h en vector: \n h =');
x=x0;
for k=1 : length(h)
err(k)=abs((eval(diff(diff(funcion,sym('x')),sym('x')))*h(k))/2);
x=x0;
m=eval(funcion);
x=x0+h(k);
n=eval(funcion);
aprx(k)=(n-m)/(h(k));
end
fprintf( ' h (f(x0+h)-f(x0))/h
h/2*(x(0))^2\n')
v=[h; aprx ; err];
fprintf( ' %f %f %f\n' ,v)
SOLUCION:
ingrese la funcion
f(x)=exp(x)
x0 =0
h (f(x0+h)-f(x0))/h h/2*(x(0))^2
aproximaciòn error