www.gusucode.com > mbctools 工具箱 matlab 源码程序 > mbctools/@mdev_local/UpdateModel.m
function OK = UpdateModel(mdev,KeepOutliers,UnChangedTests) %UPDATEMODEL update model fit for changed data % % OK = UpdateModel(mdev,KeepOutliers,UnChangedTests) % Copyright 2000-2010 The MathWorks, Inc. and Ford Global Technologies, Inc. OK=1; if nargin==1 KeepOutliers=0; end if nargin<3 UnChangedTests= zeros(0,2); end OldUnChanged= UnChangedTests(:,1); NewUnChanged= UnChangedTests(:,2); % change size of RFData % note data is retrieved WITHOUT outliers set to NaN as indices can change X= getdata(mdev,'FIT',0); XG=X{end}; D= mdev.RFData.info; [~,Y]= getdata(mdev,'X'); Ns= size(Y,3); D= [XG(:,~1) [D(~1,:); zeros(size(XG,1),size(D,2))] ]; % Partial update if there are unchanged tests PartialUpdate= ~isempty(NewUnChanged) && length(mdev.Notes)>=max(OldUnChanged); if ~KeepOutliers % clear the notes mdev.Notes = {}; % clear outliers mdev= info(outliers(mdev,[])); else % augment notes to be the correct size if ~isempty(mdev.Notes) NewNotes= cell(Ns,2); NewNotes(:,1)= {''}; NewNotes(:,2)= {[0 0 0]}; if PartialUpdate NewNotes(NewUnChanged,:)= mdev.Notes(OldUnChanged,:); end mdev.Notes= NewNotes; end end L= model(mdev); if PartialUpdate && isempty( covmodel(L) ) && ~mdev.IsLinearised % refit model only refit tests which have changed % test fitted s= false(1,Ns); s(NewUnChanged)= mdev.FitOK(OldUnChanged); mdev.FitOK= s(:)'; % model parameters s= zeros(size( mdev.AllModels,1),Ns); % parameters need initialising s(:)= NaN; s(:,NewUnChanged)= mdev.AllModels(:,OldUnChanged); mdev.AllModels= s; % response feature covariance [N1,N2,~]= size(mdev.MLE.Sigma); s= zeros(N1,N2, Ns); s(:,:,NewUnChanged)= mdev.MLE.Sigma(:,:,OldUnChanged); mdev.MLE.Sigma = s; % natural sse s= zeros(Ns,1); s(NewUnChanged)= mdev.MLE.SSE_nat(OldUnChanged); mdev.MLE.SSE_nat= s; % sse (possibly transformed) s= zeros(Ns,1); s(NewUnChanged)= mdev.MLE.SSE(OldUnChanged); mdev.MLE.SSE = s; % degrees of freedom for each test s= ones(Ns,1); s(NewUnChanged)= mdev.MLE.df(OldUnChanged); mdev.MLE.df = s; if size(D,2)>0 % response features D(NewUnChanged,:)= double(mdev.RFData.info(OldUnChanged,:)); end mdev.RFData.info = D; ChangedTests = setdiff(1:Ns, NewUnChanged); % only refit changed tests if ~isempty(ChangedTests) try %#ok<*TRYNC> [OK,mdev]= fitmodel(mdev,ChangedTests(:)'); end end else % refit all tests if using a covariance model linearised or all changed % response features mdev.RFData.info = D; % empty results stores mdev.MLE= []; mdev.FitOK= false(1,Ns); try % refit all [OK,mdev]= fitmodel(mdev); end end mdev = status(mdev,1,0); % update mdev on heap xregpointer(mdev);