www.gusucode.com > mbc 工具箱 matlab 源码程序 > mbc/@mbcmodel/@testplan/UpdateDesign.m
function [D,Index] = UpdateDesign(T,Stage,D) %UPDATEDESIGN update design or designs in test plan % % D = UpdateDesign(T,D); % D = UpdateDesign(T,Level,D); % D: Array of designs to be updated in test plan. If a design % does not exist in the test plan (matching design names) it is added. % Level: Test plan level. By default the level is the outer level % (i.e. Level 1 for One-stage, Level 2 for Two-stage) % % The design name is used to decide what to update. If no name match is % found in the test plan, the design is added. Design names must be unique % so any repeated names will be changed. The array of designs is an output. % % See also mbcmodel.testplan.AddDesign, mbcmodel.testplan.RemoveDesign, % mbcmodel.testplan.FindDesign % Copyright 2007-2013 The MathWorks, Inc. pTP = T.Pointer; ddev = pTP.designdev; NumStages = length(ddev); if ~isnumeric(Stage) D = Stage; Stage = T.Levels; end if ~isa(D,'mbcdoe.design') error(message('mbc:mdevtestplan:InvalidValue')) end dtree = ddev(Stage).DesignTree; nf = T.InputsPerLevel(Stage); Dold = T.Design{Stage}; [Matched,loc] = ismember(D,Dold); if any(Matched) && all(size(Dold)==size(D)) && isequal(find(Matched),loc(Matched)) % same size with rename Matched = true( size(Matched) ); loc = 1:length(Matched); end Done = false(size(Dold)); m0 = getModel(ddev(Stage)); Index = zeros(1,numel(D)); for i=1:numel(D) d = D(i); if d.NumberOfInputs~=nf error(message('mbc:doe:InvalidValue24')) end des = dataobject(d); m = model(des); if ~hasSameInputs(m,m0) m = setInputs(m, getInputs(m0)); des = safechange(des,@(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 if Matched(i) && ~Done(loc(i)) % don't update more than once Done(loc(i)) = true; Index(i) = loc(i)+1; dtree.designs{Index(i)} = des; else % add a new design ddev(Stage).DesignTree = dtree; ddev = addDesign(ddev,des,Stage); dtree = ddev(Stage).DesignTree; des = dtree.designs{end}; Index(i) = length(dtree.designs); end D(i) = mbcdoe.design(des); end ddev(Stage).DesignTree = dtree; % update designdev pTP.designdev(ddev); 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:InvalidModel2', getType( L ))) end des=safechange(des,@(des) model(des,m));