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