CÁLCULO NUMÉRICO (521230)

LABORATORIO 5 - 2017-2

Mínimos Cuadrados

Contents

EJERCICIO 1

1.2 Escriba un rutero en MATLAB en el que haga lo siguiente:

Recordar que el ajuste para este ejercicio era por un polinomio de grado menor o igual a 2. Es decir, de la forma

$$p(x) = c_2 x^2 + c_1 x + c_0$$

clc;clear;close all
%%DATOS
x = [0.0;1.0;2.0;3.0;4.0;5.0;6.0;7.0;8.0]; %en columnas!!
y = [12.0;10.5;10.0;8.0;7.0;8.0;7.5;8.5;9.0];

%%AJUSTE
A = [x.^2 x ones(size(x))];
b = y;
c = A\b; %notar que c corresponde a los coeficientes del polinomio, en el orden "correcto" (mayor coef. a menor).%

%%GRÁFICO
xx = linspace(min(x),max(x));
figure
hold on
plot(x,y,'bx','MarkerSize',11) %datos experimentales
plot(xx,polyval(c,xx),'r') %ajuste por mínimos cuadrados
hold off

xlabel('Aditivo (en gramos)')
ylabel('Tiempo de secado (en horas)')
legend('Datos experimentales','Ajuste polinomial')
grid on

EJERCICIO 2

2.2 Escriba un rutero en MATLAB que haga lo siguiente:

Notar que el ajuste no es polinomial, sino de acuerdo al modelo:

$$p(t) = c_1 e^{-1.5t} + c_2 e^{-0.3t} + c_3 e^{-0.05t}$$

clc;clear;close all
%%DATOS
t = [0.5;1;2;3;4];
p = [7;5.2;3.8;3.2;2.5];

%%AJUSTE
A = [exp(-1.5*t) exp(-0.3*t) exp(-0.05*t)];
b = p;
c = A\b;
fun = @(t) c(1)*exp(-1.5*t) +  c(2)*exp(-0.3*t) + c(3)*exp(-0.05*t);

%%GRÁFICO
tt = linspace(min(t),max(t));
figure
hold on
plot(t,b,'bx','MarkerSize',13)
plot(tt,fun(tt),'r')
hold off
xlabel('Tiempo (en horas)')
ylabel('Número de microorganismos (en miles)')
legend('Datos experimentales','Ajuste funcional')
grid on

%EXTRA
m1 = fun(0);
m2 = fun(1.5);
m3 = fun(5.5);

fprintf('Al inicio habían %2.0f microorganismos, luego de una hora y media habían %2.0f y al cabo de cinco horas y media, %2.0f',m1,m2,m3);
Al inicio habían 10 microorganismos, luego de una hora y media habían  4 y al cabo de cinco horas y media,  2

EJERCICIO 3

Escriba un rutero en MATLAB que ejecute las siguientes tareas:

clc;clear;close all
%%DATOS
x = [1;2;5;15;25;30;35;40];
y = [99;95;85;55;30;24;20;15];

%MODELO 1%
A1 = [ones(size(x)) x];
b1 = log(y);
c1 = A1\b1;

alf1 = exp(c1(1));
bet1 = exp(c1(2));
fun1 = @(x) alf1.*bet1.^x;
err1 = norm(b1 - A1*c1); %notar que norm(x) := norm(x,2)%;

fprintf(1,'Los parámetros para el modelo 1 son:\n');
fprintf(1,'Alfa_1 = %f\n',alf1);
fprintf(1,'Beta_1 = %f\n',bet1);
fprintf(1,'El error del modelo 1 es: %f\n\n',err1);

%MODELO 2%
A2 = [ones(size(x)) x]; %esta línea es redundante, notar que la matriz A es válida en ambos modelos%
b2 = log10(y./(100-x));
c2 = A2\b2;

alf2 = 10^(c2(1));
bet2 = c2(2);
fun2 = @(x) alf2.*(100 - x).*10.^(bet2*x);
err2 = norm(b2 - A2*c2);

fprintf(1,'Los parámetros para el modelo 2 son:\n');
fprintf(1,'Alfa_2 = %f\n',alf2);
fprintf(1,'Beta_2 = %f\n',bet2);
fprintf(1,'El error del modelo 2 es: %f\n\n',err2); %MEJOR MODELO

%GRÁFICO%
xx = linspace(0,50,250);

figure
hold on
plot(x,y,'bx');
plot(xx,fun1(xx),'r'); %MODELO 1
plot(xx,fun2(xx),'g'); %MODELO 2
hold off

xlabel('Millas recorridas (en miles)')
ylabel('Porcentaje útil')
legend('Datos experimentales','Ajuste modelo 1','Ajuste modelo 2')
grid on

%EXTRA
p45 = fun2(45);
p50 = fun2(50);
fprintf('El porcentaje de las llantas radiales del fabricante que durarán 45000 millas y 50000  son %3.2f %% y %3.2f %%, respectivamente',p45,p50);
Los parámetros para el modelo 1 son:
Alfa_1 = 106.536204
Beta_1 = 0.952375
El error del modelo 1 es: 0.102423

Los parámetros para el modelo 2 son:
Alfa_2 = 1.052490
Beta_2 = -0.015721
El error del modelo 2 es: 0.044552

El porcentaje de las llantas radiales del fabricante que durarán 45000 millas y 50000  son 11.35 % y 8.61 %, respectivamente

EJERCICIO 4

Escriba un rutero MATLAB que,

$$aumento = a + b \log_{10} (dosis)$$

que mejor ajusta por cuadrados mínimos los datos dados.

clc;clear;close all
%%DATOS
x = [0.25;1.0;1.5;2.5;7.5];
y = [-10.8;13.5;16.4;28.7;51.3];

%%AJUSTE
A = [ones(size(x)) log10(x)];
c = A\y;
a = c(1);
b = c(2);
fun = @(x) a + b*log10(x);

%%GRÁFICO
xx = linspace(0.25,7.5);

hold on
plot(x,y,'bx');
plot(xx,fun(xx),'r');
hold off
xlabel('Dosis de vitamina A (en mg)')
ylabel('Aumento de peso (en g)')
legend('Datos experimentales','Ajuste funcional','location','southeast')
grid on

EJERCICIO 5

5.1 Muestre que existe una relación lineal entre $n^{-1}$ y $t$.

Dada la relación

$$n = \frac{n_0}{1 + n_0 \alpha t}$$

Podemos reescribirla en forma lineal (para $n^{-1}$ y $t$) como:

$$\alpha t + \frac{1}{n_0} = n^{-1}$$

5.2 Encuentre la función que mejor ajusta por cuadrados mínimos a los datos en la tabla. Escriba las aproximaciones a $n_0$ y $\alpha$ obtenidas.

5.3 Grafique los pares ordenados en la tabla y la función $n$ obtenida (evaluada en 110 puntos entre 0 y 10)

clc;clear;close all
%%DATOS
t = (0:10)';
n = 1e-4*[5.03;4.71;4.40;3.97;3.88;3.62;3.30;3.15;3.08;2.92;2.70];

%%AJUSTE
A = [t ones(size(t))];
b = 1./n;
c = A\b;

alfa = c(1);
n0 = 1/c(2);
fun = @(t) n0./(1 + n0*alfa*t);
fprintf('La concentración inicial de iones es %e y el coeficiente de recombinación, %f\n',n0,alfa)

tt = linspace(0,10,110);
hold on
plot(t,n,'x')
plot(tt,fun(tt),'r')
hold off
xlabel('Tiempo (en s)')
ylabel('Concentración de iones')
legend('Datos experimentales','Ajuste funcional')
grid on
La concentración inicial de iones es 5.095600e-04 y el coeficiente de recombinación, 167.915510