www.gusucode.com > mbc 工具箱 matlab 源码程序 > mbc/@mbcmodel/@testplan/CreateResponse.m
function R = CreateResponse(T, VarName, varargin) %CREATERESPONSE Add a new response model to test plan. % % RESPONSE = CREATERESPONSE( TESTPLAN, VARNAME ) creates a model of VARNAME using the testplan's % default model(s). % RESPONSE = CREATERESPONSE( TESTPLAN, VARNAME, MODEL ) creates a one-stage model. % % RESPONSE = CREATERESPONSE( TESTPLAN, VARNAME, LOCALMODEL, GLOBALMODEL) % RESPONSE = CREATERESPONSE( TESTPLAN, VARNAME, LOCALMODEL, GLOBALMODEL, DATUMTYPE ) % creates a two-stage model of VARNAME. DATUMTYPE can only be specified % if the local model type permits a datum model. Currently only % Polynomial Spline and Polynomial with Datum models permit datum models. % VARNAME : name of variable for output % LOCALMODEL : Local Model object (use default if empty) % GLOBALMODEL : Response Feature model object (use default if empty) % DATUMTYPE : 'None', 'Maximum' , 'Minimum' ,'Linked' % MODEL : One-stage model object (use default if empty) % Copyright 2004-2015 The MathWorks, Inc. % Get the testplan TP = T.Object; if ~IsMatched(TP) error(message('mbc:mbcmodel:testplan:InvalidState1')); end % check signal InputSizes = T.InputsPerLevel; switch length(InputSizes) case 1 if length(varargin)>1 error(message('mbc:mbcmodel:testplan:InvalidArgument3')) end Args{1} = iCreateOneStageResponse(T.Object, varargin{:}); case 2 if length(varargin)>3 error(message('mbc:mbcmodel:testplan:InvalidArgument4')) end [Args{1:3}] = iCreateTwoStageResponse(T.Object,varargin{:}); end % Create the responses pR = AddResponse(TP, VarName, Args{:}); R = pFindUddChildForPointer( T.Responses, pR ); function varargout = iCreateOneStageResponse(T, Model) % iCreateOneStageResponse InputSizes = nfactors(designdev(T)); if nargin<2 || isempty(Model) G = model(T); elseif isa(Model,'mbcmodel.model') && ~isa(Model,'mbcmodel.localmodel') && Model.NumberOfInputs==InputSizes G = Model.Object; else error('mbc:mbcmodel:testplan:InvalidArgument',... 'Invalid global model for test plan') end varargout = {G}; function varargout = iCreateTwoStageResponse(T,LocalModel, GlobalModel, DatumType) % iCreateTwoStageResponse InputSizes = nfactors(designdev(T)); if nargin<2 || isempty(LocalModel) % get default model D = designdev(T); L = getModel(D(1)); elseif isa(LocalModel,'mbcmodel.localmodel') && LocalModel.NumberOfInputs==InputSizes(1) L = LocalModel.Object; else error('mbc:mbcmodel:testplan:InvalidArgument1',... 'Invalid local model for test plan') end if nargin<3 || isempty(GlobalModel) % default global model D = designdev(T); G = getModel(D(2)); elseif isa(GlobalModel,'mbcmodel.model') && ~isa(GlobalModel,'mbcmodel.localmodel') && GlobalModel.NumberOfInputs==InputSizes(2) G = GlobalModel.Object; else error('mbc:mbcmodel:testplan:InvalidArgument',... 'Invalid global model for test plan') end if nargin==4 if ~permitsDatum(L) && ~strcmpi(DatumType,'none') error('mbc:mbcmodel:testplan:InvalidValue',... 'DatumType is not permited for models of type %s',getType(L)) end % datum type enum = findtype('mbcmodel.localmodel.datumtype'); dtype = find(strcmpi(DatumType,enum.Strings)); if isempty(dtype) dstr = sprintf('%s,',enum.Strings{:}); dstr = dstr(1:end-1); error(message('mbc:mbcmodel:testplan:InvalidValue1', dstr)) end % datum type is 0:3 dtype = dtype - 1; if dtype==3 % check if linked datums are permitted R = children(T); if numChildren(T)==0 || R(1).dataptr('DATA')==0 error(message('mbc:mbcmodel:testplan:InvalidValue2')) end end else dtype = get(L,'DatumType'); end varargout = {L,G,dtype};