AJUSTE ÓPTIMO DE FUNCIONES NO LINEALES

Anuncio
Informática Aplicada a
Problemas Químicos
AJUSTE ÓPTIMO
DE FUNCIONES
NO LINEALES
Carmen Rivera Lamelas
Beatriz Pazos Ferreiro
Ajuste óptimo de funciones no lineales
%Con un número de datos obtenidos experimentalmente vamos
a intentar obtener con la ayuda de matlab una curva tal que
se ajuste a todos los datos.
%Tenemos dos parámetros no lineales en este caso,
llamados lambda 1 y lambda 2:
y =
C(1)*exp(-lambda(1)*t) + C(2)*exp(-lambda(2)*t)
%Cogemos por ejemplo unos datos experimentales donde
vemos como varía la temperatura con la Kp
t
kp
60
3.48
65
3.60
70
3.75
75
3.90
80
4.07
85
4.33
90
4.60
%El eje de las “y” en este caso Kp tiene que ser un
vector columna y el de las “x” en este caso t un vector fila.
>> t=[60 65 70 75 80 85 90];
>> kp=[3.48 3.60 3.75 3.90 4.07 4.33 4.60]';
>> plot(t,kp,'ro'); hold on; h = plot(t,kp,'b'); hold
off;
>> title('Datos de entrada'); ylim([2 5])
%Comando plot(t,y,’ro’): La “r” se introduce porque queremos
que el color de la gráfica sea el rojo y la “o” para que
salga una gráfica con círculos.
%Como queremos unir los puntos de nuestra gráfica
introducimos el comando: hold on h=plot(t,y,’b’)
%En este caso introducimos una “b” para que la línea sea de
color azul y la definimos como h.
Informática Aplicada a Problemas Químicos
Ajuste óptimo de funciones no lineales
%El comando “hold off” lo usamos para quitar la gráfica.
%Ahora tenemos que encontrar los valores de lambda tal
que minimicen la función. En este caso la lambda 1 y lambda 2
para minimizar el error.
%Queremos ajustar la función a esos valores.
% Hacemos una suposición para la estimación inicial de
lambda (start) así invocamos FMINSEARCH. Esto minimiza el
error retornado por FITFUN ajustando lambda. Da como
resultado el valor final de lambda.
>> start=[1;0]
%De esta manera comenzamos a buscarlos valores:
>> outputFcn = @(x,optimvalues,state)
fitoutputfun(x,optimvalues,state,t,kp,h);
options = optimset('OutputFcn',outputFcn,'TolX',0.1);
% Ahora con estos datos introducidos en matlab
procederemos a buscar los valores de lambda:
>>estimated_lambda =
fminsearch(@(x)fitfun(x,t,kp),start,options)
>>estimated_lambda =
‐0.0094 2.0014 %Fitfun es una función que depende de lambda, de t y de
kp, así estamos diciendo que nos busque los valores de lambda
de la función alrededor de los valores iniciales dados, y con
las opciones de optimización que le damos.
%Ahora matlab ya me da la gráfica con los valores mínimos
y la curva de regresión que buscábamos.
%La curva de
regresión es
casi una recta.
Por eso los
datos estimados
de lambda son
tan bajos.
Informática Aplicada a Problemas Químicos
Descargar