% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
% Load data to fit and save it in 'data'
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

data1 = load('AP300.dat');
data2 = load('AP400.dat');
data3 = load('AP500.dat');
data4 = load('AP1000.dat');

data(:,1) = data1(:,2);
data(:,2) = data2(:,2);
data(:,3) = data3(:,2);
data(:,4) = data4(:,2);



% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
% Load initial guess
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
x0 = load('xinitial.dat'); 


% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
% Lower and upper constraints
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
num_pars  = 17;  % number of parameters to estimate

% Inferior and superior limits
inf_limit = zeros(num_pars,1);    sup_limit = zeros(num_pars,1);


inf_limit(1)  =80.;        sup_limit(1)  = 500.;      % tumas
inf_limit(2)  = 5.;         sup_limit(2)  = 10.;    % tumen
inf_limit(3)  = 30.;          sup_limit(3)  = 400;     % twmas
inf_limit(4)  = 150.;         sup_limit(4)  = 500;    % twmen
inf_limit(5)  = 1.;       sup_limit(5)  = 20;   % trmas 
inf_limit(6)  = 0.5;        sup_limit(6)  = 25.;    % trmen
inf_limit(7)  = 50.;        sup_limit(7)  = 500;      % tsmas
inf_limit(8)  = 2.;         sup_limit(8)  = 25;    % tsmen
inf_limit(9)  = 12.0;        sup_limit(9)  = 16.0;      % gfi
inf_limit(10)  = 1.1;        sup_limit(10)  = 1.2;    % vv
inf_limit(11)  = 0.035;          sup_limit(11)  = 0.08;     % gso
inf_limit(12) = 0.001;         sup_limit(12) = 0.09;    % gsi 
inf_limit(13) = 0.8;        sup_limit(13) = 15;      % ks1 
inf_limit(14) = .1;          sup_limit(14) = 30;     % ks2
inf_limit(15) = 0.08;        sup_limit(15) = 0.80;      % vs1 
inf_limit(16) = 0.08;          sup_limit(16) = 1.25;     % vs2
inf_limit(17) = 6.2;          sup_limit(17) = 12.;     % gto



% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
% Call to the Optimization rutine
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
options = optimset('LargeScale','off','Display','iter','MaxFunEvals',5000,...
    'TolX',1e-12,'TolFun',1e-12,'TolCon',1e-12,'DiffMaxChange',0.5,...
    'DiffMinChange',1e-12);  

[x,fval,exitflag,output] = fmincon(@func,x0,[],[],[],[],...
    inf_limit,sup_limit,[],options,data);

% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
% Save data
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
save 'xfinal.dat' x -ascii  % final solution
