www.gusucode.com > mbcmodels 工具箱 matlab 源码程序 > mbcmodels/@xregtwostage/mlelin.m

    function [TS,xfinal]= mlelin(TS,Xs,Ys,W0s,ProgTable,isNested,TolFun)
% TWOSTAGE/MLELIN MLE estimates for linear using QN optimisation

%  Copyright 2000-2010 The MathWorks, Inc. and Ford Global Technologies, Inc.

% Uses Unconstrained optimisation
fopts= optimset(optimset('fminunc'),...
   'largescale','off',...
   'TolFun',TolFun,...
   'display','off');

if size(Xs,1) > 1000
   % display progress on command line for large scale problems
   fopts= optimset(fopts,'display','iter');
end 
x0= double(TS.covmodel);
if ~isempty(ProgTable)
    ah= ProgTable{1};
    delete(get(ah,'Children'))
    set(get(ah,'Title'),'String','logL vs Iteration');
    % set up axes 
    set(ah,'Visible','on');
    lh= line('Parent',ah,'XData',[],'YData',[]);
	set(ProgTable{2},'String','Quasi-Newton Covariance Estimation')
    % optimisation output function
   fopts= optimset(fopts,'OutputFcn',@MLEOutFcn);
end

% main optimisation
[cparams,f,exitflag]=fminunc(@mlelincost,x0,fopts,TS.covmodel,Ys,Xs,W0s,isNested,[],ProgTable);

[f,Bmle]= mlelincost(cparams,TS.covmodel,Ys,Xs,W0s);

TS.covmodel= update(TS.covmodel,cparams);
% update global parameters
TS= mleparams(TS,Bmle);
xfinal= double(TS.covmodel);


function stop = MLEOutFcn(x, optimValues, state,varargin)
% Output function for mlelin
% This could be made into a nested function in R14

global status

stop = status;
switch state
    case 'iter'
        ah= varargin{end}{1};
        lh= findobj(ah,'Type','line');
        % add latest cost to line
        x= [get(lh,'XData') optimValues.iteration];
        y= [get(lh,'YData')  -optimValues.fval];
        set(lh,'XData',x,'YData',y);
        drawnow
end