Está en la página 1de 16

METODOS NUMERICOS

NOMBRE: MIGUEL GUAMUSHIG


FECHA:28/07/2016
TEMA: REGRESION E INTERPOLACION (MATLAB)

OBJETIVOS:
 Realizar el análisis de los métodos de regresión e
interpolación utilizando Matlab
 Interpretar los ejercicios propuestos aplicando la
secuencia en cada método
 Entender los diferentes procesos en que pueden ser
resueltos los diferentes ejercicios

REGRESION LINEAL
Programación Matlab

clear all;
clc;
fprintf('Metodo de Regresion Lineal \n\n');
n=input('Numero de puntos: ');

for i=1:n
x(1,i)=input('dame los valores de x: ');
end

for i=1:n
y(1,i)=input('dame los valores de y: ');
end
plot(x,y)
grid
xlabel('x');ylabel('y')
pause
a=0;
for i=1:n
a=a+x(1,i)*y(1,i);
end
b=0;
for i=1:n
b=b+x(1,i)*x(1,i);
end
c=0;
for i=1:n
c=c+x(1,i);
end
e=0;
for i=1:n
e=e+y(1,i);
end
d=0;
d=c/n;
f=0;
f=e/n;
a1=(n*a-c*e)/(n*b-c*c);
a0=f-a1*d;
clc;
fprintf('Ecuacion con la que se encuentran los nuevos valores de y
\n\n');
fprintf(' y = %d + %d x',a0,a1);

for i=1:n
y(1,i)=a0+a1*x(1,i);
end
fprintf('\n\nPresiona enter para ver la nueva grafica\n\n');
pause
%Grafica con los Datos Ajustados
plot(x,y)
grid
xlabel('x');ylabel('y')
pause

Ejercicios

1) Emplee la regresión por mínimos cuadrados para ajustar


una línea recta a

x 1 2 3 4 5 67 8 9
y 1 1.5 2 3 4 5 8 10 13
y = -2.013889e+00 + 1.458333e+00 x

2) Emplee la regresión por mínimos cuadrados para ajustar


una línea recta a

x 0 2 4 6 9 11 12 15 17 19
y 5 6 7 6 9 8 7 10 12 12

y = 4.851535e+00 + 3.524700e-01 x
REGRESION POLINOMIAL
Programación Matlab

clear; format long


z=input('cuantos terminos tiene el ajuste:')
for j=1:z
e(j)=input('introducir valor exponente:')
end
x=[20,60,100,140,180,220,260,300,340,380]
y=[.18,.37,.35,.78,.56,.75,1.18,1.36,1.17,1.65]
n=10;
% n=input('cuantos puntos va a ajustas:')
% disp('introducir valores de X')

% for i =1:n

% x(i)=input('introduce el valor x:');


% y(i)=input('introduce el valor y:');

% end
for j=1:z
for i=1:n

A(i,j)=x(i)^e(j)
end
end
w=A\y'
plot(x,y,'*g')
hold on
xx=[min(x):3:max(x)];
for i=1:length (xx)
ytem(i)=0
for k=1:z

yy(i)= w(k)*xx(i)^e(k)+ytem(i);
ytem(i)=yy(i);
end
end
plot(xx,ytem)
hold off
for i=1:length (x)
yte(i)=0;
for k=1:z
yy(i)= w(k)*x(i)^e(k)+yte(i)
yte(i)=yy(i);
end
end
yte=yte
E=(y-yte).^2
E2=sum(E)
Ejercicios

1) Ajuste una ecuación cúbica a los datos siguientes:

X 3 4 5 7 8 9 11 12
Y 1.6 3.6 4.4 3.4 2.2 2.8 3.8 4.6

E1 = 0.042748525476290

2) Ajuste una ecuación cúbica a los datos siguientes:

X 5 1015 20 25 30 35 40 45 50
Y 17 24 31 33 37 37 40 40 42 41

E2 = 4.162309258286761e+45
REGRESION LINEAL MULTIPLE

Programación Matlab

clear
x=[.15;.4;.6;1.01;1.5;2.2;2.4;2.7;2.9;3.5;3.8;4.4;4.6;5.1;6.6;7.6;]

y=[4.4964;5.1284;5.6931;6.2884;7.0989;7.5507;7.5106;8.0756;7.8708;8.2403;
8.5303;8.7394;8.9981;9.1450;9.5070;9.9115]
n=16
%n=input('cuantos puntos va a ajustas:')

%disp('introduce valores de X')


% for i=1:n
% x(i)=input('introduce el valor x:');
% y(i)=input('introduce el valor y:');
%end

y=log(y);

x=log(x);

B=ones(n,2);
B(:,1)=x;
a=B\y
alfa=a(1)
beta=exp(a(2))
xx=0.01:0.01:8;
yy=a(1)*(xx.^beta);
plot(x,y,'*b',xx,yy,'r')
m= input(' #filas = ') %pedir valores
n= input(' #columnas = ') %pedir valores

B=ones(m,n+1) %hacemos una matriz de 1 colocandole una columna de mas

for i=1:m %introducimos los valores de x en la matriz

for j=1:n
x(i,j)=input('introduce los valores ')
end
end

for j=1:n %introducimos los valores de Y en la matriz

y(j,1)=input('introduce los valores de y ')

end

a=x\y
Ejercicios

1) Utilice regresión lineal múltiple para ajustar

X1 0 1 1 2 2 3 3 4 4
X2 0 1 2 1 2 1 2 1 2
Y 15.1 17.9 12.7 25.6 20.5 35.1 29.7 45.4 40.2

E1 = 6.362402848333388

2) Use regresión lineal múltiple para ajustar

X1 0 0 1 2 0 1 2 2 1
X2 0 2 2 4 4 6 6 2 1
Y 14 21 11 12 23 23 14 6 11

E2 = 4.57928365628384
INTERPOLACION LINEAL

Programación Matlab
t = [1 2 3 4 5];

p = [3 5 7 5 6];

x = 1:0.1:6;

y = interp1 (t, p, x, 'spline');

plot (t, p,'o',x, y)

y = interp1 (t, p, 2.5, 'spline')


y = 6.42187500000000

Ejercicios

1) Dados los datos con el uso de polinomios de interpolación lineal elija la


secuencia de puntos más apropiada para alcanzar la mayor exactitud posible
para sus estimaciones.

X 1.6 2 2.5 3.2 4 4.5

f (X) 2 8 14 15 8 2
2) Dados los datos con el uso de polinomios de interpolación lineal elija la
secuencia de puntos más apropiada para alcanzar la mayor exactitud
posible para sus estimaciones.
X 1 2 3 5 7 8
f (X) 3 6 19 99 291 444

INTERPOLACION CUADRATICA

Programación Matlab

t = [1 2 3 4 5 6 7 8];
p = [3 5 7 5 6 7 7 5];
% t=linspace(-1,1,10);
% p=1./(1+25*t.^2);
x = 1:0.1:8;
%x = linspace(-1,1,100);
y = interp1 (t, p, x, 'spline') ; plot (t, p,'o',x, y); hold on
y = interp1 (t, p, x, 'linear') ; plot (x, y,'r')
y = interp1 (t, p, x, 'nearest') ; plot (x, y,'g')
y = interp1 (t, p, x, 'pchip') ; plot (x, y,'b')
y = interp1 (t, p, x, 'cubic') ; plot (x, y,'c')
y = interp1 (t, p, x, 'v5cubic') ; plot (x, y,'m')
hold off
Ejercicios

1) Emplee interpolación inversa con el uso de un polinomio de


interpolación cúbica y de bisección, para determinar el valor de x
que corresponde a f(x) = 0.23, para los datos tabulados que siguen:

X 2 3 4 5 6 7
f(X) 0.5 0.3333 0.25 0.2 0.1667 1.1429

2) Utilice interpolación inversa para determinar el valor de x que


corresponde a f(x) = 0.85, para los datos tabulados siguientes:

X 0 1 2 3 4 5
f(X) 0 0.5 0.8 0.9 0.941176 0.961538
INTERPOLACION DE NEWTON

Programación Matlab

%Interpolacion de newton

clear;clc;
disp('metodos numericos');
disp('interpolacion');
disp('interpolacion');
n=input('ingrese el grado del polinomio, n=');
fprintf('Se necesitan %.0f puntos\n',n+1);
disp('ingrese los puntos');
for i=1:n+1
fprintf('x%.0f=',i-1);
X(i)=input(' ');
fprintf('y%.0f=',i-1);
Y(i)=input(' ');
end
DD=zeros(n+1);
DD(:,1)=Y;
for k=2:n+1
for J=k:n+1
DD(J,k)=[DD(J,k-1)-DD(J-1,k-1)]/[X(J)-X(J-k+1)];
end
end

disp('La matriz de diferencias divididas es:');


disp(DD);
disp('El polinomio de newton es');
syms x;
polnew=DD(1,1);
P=1;
for i=1:n
P=P*(x-X(i));
polnew=polnew+P*DD(i+1,i+1);
end
polnew=expand(polnew);
pretty(polnew);
x=input('ingrese el valor de x a interpolar,x=');
vi=eval(polnew);
fprintf('el valor interpolado es %.2f\n',vi);
hold on;
ezplot(polnew,[X(1) X(n+1)]);
plot(x,vi,'r+');
Ejercicios

1) Emplee interpolación de newton con el uso de un polinomio de


interpolación cúbica para determinar el valor de x que corresponde
a f(x) = 0.5, para los datos tabulados que siguen:

X 1 2 3 4 5 6
f(X) 0.3 0.3633 0.55 1.2 1.1667 2.142

La matriz de diferencias divididas es:


2 0 0 0
4 1 0 0
6 1 0 0
8 1 0 0

El polinomio de newton es
X ^3+3*x ^2-x+ 1

ingrese el valor de x a interpolar, x=2


el valor interpolado es 3.00

2) Utilice interpolación de newton para determinar el valor de x que


corresponde a f(x) = 1.5,con un polinomio cubico para los datos tabulados
siguientes:

X 1.3 2.5 3.6 4.7 5.7 6.8 7.9 8.5


f(X) 3.5 5.6 7.6 5.6 6.7 7.8 7.9 5.3
El polinomio de newton es
3 2
5 x 65 x 203 x 207
- ---- + ----- - ----- + ---
32 32 32 32

ingrese el valor de x a interpolar, x=3


el valor interpolado es 1.50

INTERPOLACION DE LAGRANGE

Programación Matlab

fprintf(' INTERPOLACION "POLINIMIO LAGRAGE"\n\n\n');


xi=input('Ingrese los puntos pertenecientes a las x: ');
yi=input('Ingrese los puntos pertenecientes a las y: ');
%input es un comando de solicitud de entrada de datos del usuario.
n=length(xi);
x=sym('x'); %esta funcion nos permite dejar la variable 'x' como
simbolica
% y asi poder trabajar con ella, sin tener que asignarle un valor.
for j=1:n
producto=1;
for i=1:j-1
producto=producto*(x-xi(i)); %calculo del producto 1 superior de
L
end
producto2=1;
for i=j+1:n
producto2=producto2*(x-xi(i)); %calculo del producto 2 superior
de L
end
producto3=1;
for i=1:j-1
producto3=producto3*(xi(j)-xi(i)); %calculo del producto 3
inferior de L
end
producto4=1;
for i=j+1:n
producto4=producto4*(xi(j)-xi(i)); %calculo del producto 4
inferior de L
end
L(j)=(producto*producto2)/(producto3*producto4); %calculos de las L
para
fprintf('\n L%d:\n',j-1) %poder hallar el polinomio
disp(L(j)) %la funcion dispo nos permite visualizar varibles o texto
% en el workspace
end
pn=0;
for j=1:n
pn=pn+L(j)*yi(j); %calculo del polinomio interpolante
end
fprintf('\n POLINOMIO INTERPOLANTE: \n')
pn = simple(pn); %este comando nos permite simplificar toda la
expresion
disp(pn)
opc=input('\nDesea aproximar un valor (si/no): ','s');
if opc=='si'
x=input('\nIngrese el punto a aproximar: ');
y=eval(pn); %evaluar el punto en el polinomio
disp('\nLa aproximacion a f(x) es:')
disp(y)
end

Ejercicios

1) Emplee la porción de la tabla de vapor que se da para el H2O supercalentada a


200 MPa, para a) encontrar la entropía correspondiente s para un volumen
específico v de 0.108 m3/kg con interpolación lineal, b) encontrar la misma
entropía correspondiente con el uso de interpolación cuadrática, y c) hallar el
volumen correspondiente a una entropía de 6.6 con el empleo de interpolación
inversa.

V (m3/kg) 0.10377 0.11144 0.1254


S (kJ/kg · K) 6.4147 6.5453 6.7664

L0:
(36893488147419103232*(x - 627/5000)*(x - 1393/12500))/6120707159981939

L1:
-(36893488147419103232*(x - 627/5000)*(x - 10377/100000))/3950303835106237

L2:
(18446744073709551616*(x - 1393/12500)*(x - 10377/100000))/5570082917428161
2) Desarrolle, depure y pruebe un programa en el lenguaje de alto nivel o macros
que elija, para implantar la interpolación de LaGrange. Haga que se base en el
seudocódigo Pruébelo con la duplicación del ejemplo

V (m3/kg) 1.10377 2.11144 3.1254


S (kJ/kg · K) 12.4147 24.5453 36.766

L0:
(1125899906842624*(x - 15627/5000)*(x - 26393/12500))/2293611122400155)

L1:
-(4503599627370496*(x - 1242734540175683/1125899906842624)*(x
-15627/5000))/46014947021341)

L2:
(2251799813685248*(x - 1242734540175683/1125899906842624) *(x-
26393/12500))/461585624990)

 CONCLUSIONES
 La resolución mediante Matlab nos da un aspecto de entendimiento más amplia en cada
método aplicado y a través de los ejercicios propuestos en Chapra podemos ver las
gráficas que corresponden a cada ejercicio planteado.
 La compresión de cada método aplicado viene dado por la formulación que es explicada
en cada código logarítmico mediante Matlab.

También podría gustarte