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