ADA 6. Polinomios Interpolantes RESUELTA
ADA 6. Polinomios Interpolantes RESUELTA
ADA 6. Polinomios Interpolantes RESUELTA
MÉTODOS NUMÉRICOS
ADA 6: polinomios de interpolación y ajuste de curvas
Elaborado por:
Cetz Guzmán Ángel Ramiro
Cob Pérez Marco Antonio
Mis Navarrete Isaac Uriel
Solís Montero Nehemías Aarón
Tabasco Matos Argel Antonio
Fecha de entrega:
15 de noviembre, 2019
Ejercicio 1. Dados los datos
𝑥 1 2 2.5 3 4 5
𝑓(𝑥) 1 5 7 8 2 1
estime el valor de 𝑓(3.4) usando interpolación lineal y luego con interpolación
cuadrática.
Interpolación lineal
>> inter_lineal
[3,8]
[4,2]
3.4
f(3.400000)=5.600000
Interpolación cuadrática
%Entradas
P1=input('ingrese primer par de datos[a,f(a)]\n');
P2=input('ingrese segundo par de datos[b,f(b)]\n');
P3=input('ingrese tercer par de datos[c,f(c)]\n');
x=input('Ingrese el punto a aproximar x\n');
%Asignacion de valores
a= P1(1);
fa=P1(2);
b=P2(1);
fb=P2(2);
c=P3(1);
fc=P3(2);
% Calculo de coeficiente
a0=fa;
a1=(fb-fa)/(b-a);
a2=((fc-fb)/(c-b)-(fb-fa)/(b-a))/(c-a);
%Salida
y=a0+a1*(x-a)+a2*(x-a)*(x-b);
fprintf('f(%f)=%f\n',x,y)
>> inter_cuad
[3,8]
[4,2]
[5,1]
3.4
f(3.400000)=5.000000
𝑥 1 2 2.5 3 4 5
𝑓(𝑥) 1 5 7 8 2 1
1) Calcule 𝑓(3.4) usando el polinomio interpolador de Newton
2) Estime el error de su predicción.
function [D,yi,p,xi]=internw(x,y,xi)
%Input - x es un vector que contiene una lista de abcisas
% - y es un vector que contiene una lista de ordenadas
% - xi es el valor a hallar
%Output - yi es el valor hallado
% - D es la tabla de diferencias de diviciones
n=length(x);
D=zeros(n,n);
D(:,1)=y';
%Formula para la tabla de diferencia de divisiones
for j=2:n
for k=j:n
D(k,j)=(D(k,j-1)-D(k-1,j-1))/(x(k)-x(k-j+1));
end
end
%Inicializa las variables
n=length(x);
b=zeros(n);
b(:,1)=y(:);
%Obtener la tabla de diferencias
for j=2:n
for i=1:n-j+1
b(i,j)=(b(i+1,j-1)-b(i,j-1))/(x(i+j-1)-x(i));
end
end
%Calcular el dato interpolado
xt=1;
yi=b(1,1);
for j=1:n-1
xt=xt.*(xi-x(j));
yi=yi+b(1,j+i)*xt;
end
%Construir el polinomio
p=num2str(b(1,1));
xx=x*-1;
for j=2:n
signo='';
if b(1,j)>=0
signo='+';
end
xt='';
for i=1:j-1
signo2='';
if xx(i)>=0
signo2='+';
end
xt=strcat(xt,'*(x',signo2,num2str(xx(1)),')');
end
p=strcat(p,signo,num2str(b(1,j)),xt);
end
%'para calcular el error es D*(xi-x1)*(xi-x2)*(xi-xn)'
end
>> xi=3.4
xi =
3.4000
>> [D,yi,p,xi]=internw(x,y,xi)
D=
Columns 1 through 5
1.0000 0 0 0 0
5.0000 4.0000 0 0 0
7.0000 4.0000 0 0 0
Column 6
0.4556
yi =
6.9766
p=
1+4*(x-1)+0*(x-1)*(x-1)-1*(x-1)*(x-1)*(x-1)-0.22222*(x-1)*(x-1)*(x-
1)*(x-1)+0.45556*(x-1)*(x-1)*(x-1)*(x-1)*(x-1)
xi =
3.4000
>>Error= 0.4556*(3.4-1)*(3.4-2)*(3.4-2.5)*(3.4-3)*(3.4-4)*(3.4-5)
Error =
0.5291
Ejercicio 3. Dados los datos
𝑥 1 2 3 5 6
𝑓(𝑥) 4.75 4 5.25 19.75 36
X=[1 2 3 5 6];
C=
L=
>> polyval(C,4)
ans =
10.0000
Posición
en pulgadas Dosis en 105 rads/h
desde el punto base
0 1.9
0.5 2.39
1 2.71
1.5 2.98
2 3.2
3 3.2
3.5 2.98
4 2.74
Como puede observarse, la lectura en 2.5 pulgadas no se reportó, pero se
necesita el valor de esta radiación. Utilice polinomios de interpolación de varios
grados a los datos para estimar el dato faltante. ¿Algún polinomio de mínimos
cuadrados proporciona mejor ajuste? Justifique su respuesta.
>> C=polyfit(x,y,7)
Columns 1 through 5
-0.0024 0.0312 -0.1385 0.2115 0.0858
Columns 6 through 8
>> polyval(C,2.5)
ans =
3.2907
Mínimos cuadrados
>> Exi=sum(x)
Exi =
15.5000
>> Eyi=sum(y)
Eyi =
22.1000
>> Exiyi=sum(x.*y)
Exiyi =
45.7650
>> Exi2=sum(x.^2)
Exi2 =
44.7500
>> a1=(8*Exiyi-(Eyi*Exi))/((8*Exi2)-(Exi.^2))
a1 =
0.2002
>> a0=(Eyi-(a1*Exi))/8
a0 =
2.3747
>> x1=linspace(0,4);
>> y1=2.3747+0.2002*x1;
>> plot(x,y,'o',x1,y1,'r'),grid
Conocemos algunos datos, pero se debe calcular los datos faltantes para poder
encontrar los valores de a0, a1 y a2
>> Ex3=sum(x.^3)
Ex3 =
146.3750
>> Ex4=sum(x.^4)
Ex4 =
509.1875
>> Exi2yi=sum(y.*x.^2)
Exi2yi =
131.9575
>> A=[8 Exi Exi2; Exi Exi2 Ex3; Exi2 Ex3 Ex4]
A=
>> A=[8 Exi Exi2; Exi Exi2 Ex3; Exi2 Ex3 Ex4]
A=
>> B=[22.10;45.7650;131.9575]
B=
22.1000
45.7650
131.9575
>> X=A\B
X=
1.8932
1.0634
-0.2129
a0=1.8932
a1=1.0634
a2=-0.2129
La ecuación es y=1.8932+1.0634x-0.2129x2
>> x1=linspace(0,4);
>> y1=1.8932+1.0634*x1-0.2129*x1.^2;
>> plot(x,y,'o',x1,y1,'r'),grid
Polinomio de 3er grado
>> Ex5=sum(x.^5)
Ex5 =
1.8328e+03
Ex6 =
6.7397e+03
Exi3yi =
428.1938
>> A=[8 Exi Exi2 Ex3; Exi Exi2 Ex3 Ex4; Exi2 Ex3 Ex4 Ex5;Ex3 Ex4 Ex5 Ex6]
A=
1.0e+03 *
>> B=[22.10;45.7650;131.9575;428.1938]
B=
22.1000
45.7650
131.9575
428.1938
>> X=A\B
X=
1.9061
1.0054
-0.1727
-0.0068
a0=1.9061
a1=1.0054
a2= -0.1727
a3= -0.0068
La ecuación es y=1.9061+1.0054x-0.1727x2-0.0068x3
>> x1=linspace(0,4);
>> y1=1.9061+1.0054*x1-0.1727*x1.^2-0.0068*x1.^3;
>> plot(x,y,'o',x1,y1,'r'),grid
>> x1=2.5;
Polinomio de grado 2
>> y1=1.8932+1.0634*x1-0.2129*x1.^2
y1 =
3.2211
Polinomio de grado 3
>> y1=1.9061+1.0054*x1-0.1727*x1.^2-0.0068*x1.^3
y1 =
3.2340
Como se puede observar en las gráficas y en las evaluaciones, el ajuste se va
aproximando al valor original que se obtuvo con mínimos cuadrados
𝑥 1 2 3 4 5
𝑓(𝑥) 0.6 1.9 4.3 7.6 12.6
determine la curva que mejor se ajusta en el sentido de mínimos cuadrados,
llevando a cabo los siguientes pasos:
>> Exi=sum(x)
Exi =
15
>> Eyi=sum(y)
Eyi =
27
>> Exiyi=sum(x.*y)
Exiyi =
110.7000
>> Exi2=sum(x.^2)
Exi2 =
55
>> a1=(5*Exiyi-(Eyi*Exi))/((5*Exi2)-(Exi.^2))
a1 =
2.9700
>> a0=(Eyi-(a1*Exi))/5
a0 =
-3.5100
>> Y=log(y)
Y=
ans =
0.7475 -1.0123
>> y=exp(-1.0123)*exp(0.7475*x);
>> X=linspace(0,5);
>> Y=-3.5100+2.9700*X;
>> x1=linspace(0,5);
>> y1=exp(-1.0123)*exp(.7475*x1);
>> plot(X,Y,'b',x1,y1,'g--'),grid
Error
>> x=[1 2 3 4 5];
>> y=-3.5100+2.9700*x;
>> y1=exp(-1.0123)*exp(.7475*x);
>> Er=(1/5*((sum(y-y1)).^2)).^(1/2)
Er =
0.5793
>> X=log(x);
>> Y=log(y);
>> polyfit(X,Y,1)
ans =
1.8860 -0.5755
>> y1=exp(-0.5755)*x.^(1.8860)
>> X=linspace(0,5);
Y=-3.5100+2.9700*X;
x1=linspace(0,5);
>> y1=exp(-0.5755)*x1.^(1.8860);
>> plot(X,Y,'b',x1,y1,'g--'),grid
>> y=-3.5100+2.9700*x;
>> y1=exp(-0.5755)*x.^(1.8860);
>> Er=(1/5*((sum(y-y1)).^2)).^(1/2)
Er =
0.2262