% Esta es una demostración sobre el ajuste óptimo de una función no
lineal
% a un conjunto de datos. Se usa FMINSEARCH, una implementación del
% algoritmo simple Nelder-Mead (Búsqueda dirigida), para mnimizar una
% funcion no lineal de varias variables.
%%
% Primero, creamos algunos datos de muestra y los diagramamos.
t = (0:.1:2)';
y = [5.8955 3.5639 2.5173 1.9790 1.8990 1.3938 1.1359 1.0096
1.0343 ...
0.8435 0.6856 0.6100 0.5392 0.3946 0.3903 0.5474 0.3459 0.1370 ...
0.2211 0.1704 0.2636]';
plot(t,y,'ro'); hold on; h = plot(t,y,'b'); hold off;
title('DATOS DE ENTRADA'); ylim ([0 6])
%%
% La meta es ajustar a siguiente función con dos parámetros lineales y
dos
% parámetros no lineales a los datos:
% y = C(1)*exp(-lambda(1)*t) + C(2)*exp(-lambda(2)*t)
% Para ajustar esta función, hemos creado una funcion FITFUN. Dado el
% parámetro no lineal (lambda) y el dato (t y y), FITFUN calcula el
error
% en el ajuste de esta ecuación y actualiza la línea (h).
type fitfun
%%
% function err = fitfun(lambda,t,y)
% %FITFUN Used by FITDEMO.
% FITFUN(lambda,t,y) Retorna el error entre los datos y los valores
% computados por la funcion que este usando lambda.
%
% FITFUN asume una función de la forma
%
% y = c(1)*exp(-lambda(1)*t) + ... + c(n)*exp(-lambda(n)*t)
%
% con n parámetros lineales and n parámetros no lineales.
%
% %A = zeros(length(t),length(lambda)); for j = 1:length(lambda)
% A(:,j) = exp(-lambda(j)*t);
% %end c = A\y; z = A*c; err = norm(z-y);_
%%
% Hacemos una conjetura para la estimación inicial de lambda (inicio)
e
% invocamos FMINSEARCH. Esto minimiza el error retornado por FITFUN
% ajustando lambda. Este retorna el valor final de lambda. Se usa una
% función de saliad para diagramar los ajustes intermedios.
Inicio = [1;0];
% Usamos una función anónima para ingresar los parámetros adicionales
t, y,
% h a la funcion de salida.
outputFcn = @(x,optimvalues,state)
fitoutputfun(x,optimvalues,state,t,y,h);
options = optimset('OutputFcn',outputFcn,'TolX',0.1);
estimated_lamda = fminsearch(@(x)fitfun(x,t,y),Inicio,options)