www.gusucode.com > mbcdesign 工具箱 matlab 源码程序 > mbcdesign/@contwostage/fit.m
function [con,ok,sp,bp,sfopts] = fit(con,action,opts,Xdata,sp,bp) %FIT fit con object % % [con,ok,sp,bp,status,params] = fit(con,action,opts,X,sp,bp) % Inputs % con: con object % action: 'All', 'SpecialPoints', 'BoundaryPoints', or% 'Constraint' % opts: fitoptions optimmgr % X: data to be fitted % sp: special points % bp: boundary points % % Outputs: % con % ok: fit status flag % sp special points % bp boundary points % status: status structure % params: local parameters matrix % Copyright 2008 The MathWorks, Inc. and Ford Global Technologies, Inc. doSpecialPoints = false; doBoundaryPoints = false; doFitConstraint = false; sopts = []; bpopts = []; fopts = []; localConstraintFitOptions =[]; globalModelFitOptions = []; switch lower(action) case 'all' sopts = get(opts,'SpecialPointOptions'); bpopts = get(opts,'BoundaryPointOptions'); fopts = get(opts,'ConstraintFitOptions'); localConstraintFitOptions = get( fopts, 'LocalConstraintOptions' ); globalModelFitOptions = get( fopts, 'GlobalModelOptions' ); doSpecialPoints = true; doBoundaryPoints = true; doFitConstraint = true; case 'specialpoints' sopts = opts; doSpecialPoints = true; case 'boundarypoints' bpopts = opts; doBoundaryPoints = true; case 'constraint' fopts =opts; localConstraintFitOptions = get( fopts, 'LocalConstraintOptions' ); globalModelFitOptions = get( fopts, 'GlobalModelOptions' ); doFitConstraint = true; otherwise error(message('mbc:xregbdrydev:InvalidArgument')); end haveSpecialPointOptions = ~isempty(sopts ); haveBoundaryPointOptions = ~isempty( bpopts ); haveConstraintFitOptions = ~isempty( localConstraintFitOptions) || ~isempty(globalModelFitOptions); doSpecialPoints = doSpecialPoints && haveSpecialPointOptions; doBoundaryPoints = doBoundaryPoints && haveBoundaryPointOptions; conLocal = getlocal( con ); doFitLocalConstraint = doFitConstraint && ~isempty( localConstraintFitOptions ); doFitGlobalModel = doFitConstraint && ~isempty( globalModelFitOptions ); % Get data for fitting constraint to Xg = Xdata{1}; % Global Data Xl = Xdata{2}; % Local Data nSweeps = size( Xl, 3 ); % Allocate space ahead of fitting ok = true( nSweeps, 1 ); if ~iscell( sp ) || any( size( sp ) ~= [nSweeps, 1] ), sp = cell( nSweeps, 1 ); end if ~iscell( bp ) || any( size( bp ) ~= [nSweeps, 1] ), bp = cell( nSweeps, 1 ); end parameters = zeros( nSweeps, nFeatures( conLocal ) ); % Fit local constraints if doSpecialPoints || doBoundaryPoints || doFitLocalConstraint, for i = 1:nSweeps, if ok(i) && doSpecialPoints, [conLocal, sp{i}, ok(i)] = findSpecialPoints( conLocal, sopts, Xl{i} ); end if ok(i) && doBoundaryPoints, [conLocal, bp{i}, ok(i)] = findBoundaryPoints( conLocal, bpopts, Xl{i} ); end if ok(i) && doFitLocalConstraint, x = Xl{i}; x = x(bp{i},:); [conLocal, ok(i)] = fitConstraint( conLocal, localConstraintFitOptions, x ); end if ok(i), parameters(i,:) = getFeatures( conLocal ); else parameters(i,:) = NaN; end end end % Fit global models if any( ok ) && doFitGlobalModel, % We were able to fit at least some local constraints. We now fit the % global model to data provided by those constraint that we were able % to fit. [con, ok] = fitglobal( con, Xg(ok,:), parameters(ok,:) ); % TO DO: globalModelFitOptions ? else ok = any( ok ); end sfopts.doSpecialPoints = doSpecialPoints; sfopts.doBoundaryPoints = doBoundaryPoints; sfopts.doFitConstraint = doFitConstraint; sfopts.LocalParameters = parameters;