www.gusucode.com > mbc 工具箱 matlab 源码程序 > mbc/@mbcmodel/@testplan/AddDesign.m
function D = AddDesign(T,Stage,D,Parent) %ADDDESIGN add design or designs to test plan % % D = AddDesign(T,D); % D = AddDesign(T,Level,D); % D = AddDesign(T,Level,D,Parent); % D: Array of designs to be added to the test plan. % Level: Test plan level. By default the level is the outer level % (i.e. Level 1 for One-stage, Level 2 for Two-stage) % Parent: Parent design in design tree. By default designs are added % to the top level of the design tree % % In order to ensure that the design names are unique in the test plan, % the design name may be changed when adding a design to a test plan. The % array of designs with modified names is an output. % % See also mbcmodel.testplan.UpdateDesign, mbcmodel.testplan.RemoveDesign, % mbcmodel.testplan.FindDesign % Copyright 2007-2013 The MathWorks, Inc. pTP = T.Pointer; dd = pTP.designdev; NumStages = length(dd); if ~isnumeric(Stage) D = Stage; Stage = T.Levels; end if nargin<4 Parent = 1; else Dold = T.Design{Stage}; [Matched,loc] = ismember(Parent,Dold); if ~isscalar(Matched) || ~Matched error(message('mbc:mbcmodel:testplan:InvalidModel')) end Parent = loc+1; end m0 = getModel(dd(Stage)); Index = zeros(size(D)); for i=1:length(D) des = dataobject(D(i)); m = model(des); if ~hasSameInputs(m,m0) m = setInputs(m, getInputs(m0)); des = model(des,m); end % need to check localmod and Stage if isa(m,'localmod') && Stage==NumStages des = globalmodel(des, m); elseif ~isa(m,'localmod') && Stage<=NumStages des = localmodel(des, m); end dd = addDesign(dd,des,Stage,Parent); dtree = dd(Stage).DesignTree; des = dtree.designs{end}; Index(i)= length(dtree.designs); D(i) = mbcdoe.design(des); end pTP.designdev(dd); function des = localmodel(des,m) if DesignType(des)==1 %optimal designs L = xregCreateModel(@localsurface,m); L = set(L,'model',m); else % make multimodel L = xregCreateModel(@localmulti,m); L = set(L,'models',{m}); end des=safechange(des,@(des) model(des,L)); function des = globalmodel(des,L) % make global model if isa(L,'localsurface') || isa(L,'localusermod') % get internal model m = get(L,'model'); elseif isa(L,'localmulti') % get model from multimodel m = get(L,'currentmodel'); else error(message('mbc:mbcmodel:testplan:InvalidModel1', getType( L ))) end des=safechange(des,@(des) model(des,m));