ADA 6. Polinomios Interpolantes RESUELTA

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 20

UNIVERSIDAD AUTÓNOMA DE YUCATÁN

FACULTAD DE INGENIERÍA QUÍMICA

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

P1=input('ingrese primer par de datos[a,f(a)]\n');


P2=input('ingrese primer par de datos[b,f(b)]\n');
x=input('Ingrese el punto a aproximar x\n');
a= P1(1);
fa=P1(2);
b=P2(1);
fb=P2(2);
y=(fb-fa)/(b-a)*(x-a)+fa;
fprintf('f(%f)=%f',x,y);

>> x=[1 2 2.5 3 4 5];

>> y=[1 5 7 8 3 2];

>> inter_lineal

ingrese primer par de datos[a,f(a)]

[3,8]

ingrese primer par de datos[b,f(b)]

[4,2]

Ingrese el punto a aproximar x

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

ingrese primer par de datos[a,f(a)]

[3,8]

ingrese segundo par de datos[b,f(b)]

[4,2]

ingrese tercer par de datos[c,f(c)]

[5,1]

Ingrese el punto a aproximar x

3.4

f(3.400000)=5.000000

Ejercicio 2. Dados los datos

𝑥 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.

>> x=[1 2 2.5 3 4 5];


>> y=[1 5 7 8 2 1];

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

8.0000 2.0000 -2.0000 -1.0000 0

2.0000 -6.0000 -5.3333 -1.6667 -0.2222

1.0000 -1.0000 2.5000 3.1333 1.6000

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

Para calcular el error:

>>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

Calcule 𝑓(4) usando el polinomio interpolador de Lagrange

function [C,L]= lagran(X,Y)


W=length(X);
n= W-1;
L= zeros(W,W);
%Formando los coeficientes de lagrange
for k = 1: n+1
V= 1;
for j =1: (n+1)
if k~= j
V= conv(V, poly(X(j)))/(X(k)-X(j));
end
end
L(k,:)=V;
end
%Coeficientes del polinomio
C=Y*L;

X=[1 2 3 5 6];

>> Y=[4.75 4 5.25 19.75 36];

>> [C,L]= lagran(X,Y)

C=

0.0000 0.2500 -0.5000 -1.0000 6.0000

L=

0.0250 -0.4000 2.2750 -5.4000 4.5000

-0.0833 1.2500 -6.4167 12.7500 -7.5000


0.0833 -1.1667 5.4167 -9.3333 5.0000

-0.0417 0.5000 -1.9583 3.0000 -1.5000

0.0167 -0.1833 0.6833 -1.0167 0.5000

>> polyval(C,4)

ans =

10.0000

Ejercicio 4. En estudios de polimerización inducida por radiación, se emplea


una fuente de rayos gamma para obtener dosis medidas de radiación. Sin
embargo, la dosis varía con la composición del aparato según los datos que se
muestran a continuación:

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.

>> x=[0 0.5 1 1.5 2 3 3.5 4];

>> y=[1.9 2.39 2.71 2.98 3.2 3.2 2.98 2.74];

>> C=polyfit(x,y,7)

Columns 1 through 5
-0.0024 0.0312 -0.1385 0.2115 0.0858

Columns 6 through 8

-0.6348 1.2572 1.9000

La ecuación encontrada es y= -0.0024x7+0.0312x6-


0.1385x5+0.2115x4+0.0858x3-0.6348x2+1.2572x+1.9000

>> polyval(C,2.5)

ans =

3.2907

El valor 3.2907 es la dosis en 105rads/h cuando la posición en pulgadas desde


el punto base es de 2.5

Mínimos cuadrados

Usaremos las siguientes fórmulas para calcular a0 y a1

>> 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

Ecuación de la recta es y= 2.3747+0.2002x

>> x1=linspace(0,4);

>> y1=2.3747+0.2002*x1;
>> plot(x,y,'o',x1,y1,'r'),grid

Polinomio de 2do grado

Usaremos el siguiente método para calcular el polinomio de grado 2

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

Utilizando el método de la matriz inversa para encontrar los valores

>> A=[8 Exi Exi2; Exi Exi2 Ex3; Exi2 Ex3 Ex4]

A=

8.0000 15.5000 44.7500

15.5000 44.7500 146.3750

44.7500 146.3750 509.1875

>> A=[8 Exi Exi2; Exi Exi2 Ex3; Exi2 Ex3 Ex4]

A=

8.0000 15.5000 44.7500

15.5000 44.7500 146.3750

44.7500 146.3750 509.1875

>> B=[22.10;45.7650;131.9575]

B=
22.1000

45.7650

131.9575

>> X=A\B

X=

1.8932

1.0634

-0.2129

Lo que significa que los valores son:

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

Calculamos los datos faltantes

>> Ex5=sum(x.^5)

Ex5 =

1.8328e+03

Ex6 =

6.7397e+03

Exi3yi =

428.1938

Utilizando el método de la matriz inversa para encontrar los valores

>> A=[8 Exi Exi2 Ex3; Exi Exi2 Ex3 Ex4; Exi2 Ex3 Ex4 Ex5;Ex3 Ex4 Ex5 Ex6]

A=
1.0e+03 *

0.0080 0.0155 0.0447 0.1464

0.0155 0.0447 0.1464 0.5092

0.0447 0.1464 0.5092 1.8328

0.1464 0.5092 1.8328 6.7397

>> 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

Lo que significa que los valores son:

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

Evaluando las funciones para 2.5 se obtiene:

>> 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

Ejercicio 5. Considere el siguiente conjunto de datos

𝑥 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:

1) Ajuste una curva de la forma 𝑓(𝑥) = 𝐶𝑒 𝐴𝑥


2) Ajuste una curva de la forma 𝑓(𝑥) = 𝐶𝑥 𝐴
3) Use el error cuadrático medio dado por:
1
𝑛 2
1
𝐸2 (𝑓) = ( ∑|𝑓(𝑥𝑘 ) − 𝑦𝑘 |2 )
𝑛
𝑘=1
para determinar cuál de las dos curvas ajusta mejor.

>> x=[1 2 3 4 5];

>> y=[0.6 1.9 4.3 7.6 12.6];

>> 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

Ecuación de la recta es y= -3.5100+2.9700x

1) Ajuste una curva de la forma 𝑓(𝑥) = 𝐶𝑒 𝐴𝑥

>> x=[1 2 3 4 5];

>> y=[0.6 1.9 4.3 7.6 12.6];

>> Y=log(y)

Y=

-0.5108 0.6419 1.4586 2.0281 2.5337


>> polyfit(x,Y,1)

ans =

0.7475 -1.0123

La recta es: y= 0.7475x-1.0123

Modelo exponencial es:

>> 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

>> legend('Funcion Minimos cuadrados','y=Ce^Ax')

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

2) Ajuste una curva de la forma 𝑓(𝑥) = 𝐶𝑥 𝐴

>> x=[ 1 2 3 4 5];

>> y=[0.6 1.9 4.3 7.6 12.6];

>> X=log(x);

>> Y=log(y);

>> polyfit(X,Y,1)

ans =

1.8860 -0.5755

La recta es: 1.8869x -0.5755

Modelo exponencial es:

>> 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

>> legend('Funcion Minimos Cuadrados','y=Cx^A')


Error

>> x=[1 2 3 4 5];

>> 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

El error en la curva ajustada de la función 𝑓(𝑥) = 𝐶𝑥 𝐴 presenta un error menor


con respecto al ajuste de mínimos cuadrados, se puede concluir que es la más
adecuada para estimar los valores

También podría gustarte