www.gusucode.com > mbcdesign 工具箱 matlab 源码程序 > mbcdesign/@cset_grdlatt/set.m
function obj=set(obj,param,data) % SET Set candidate set parameters % % OBJ=SET(OBJ,PARAM,DATA) % % PARAM may be one of: % % Levels: Cell array of factor levels for grid dimensions % Limits: Cell array of [Min Max] values for lattice % g : Vector of prime generator numbers % N : Number of points % griddims: dimensions to grid over % latticedims: dimensions to create lattice over % % Copyright 2000-2004 The MathWorks, Inc. and Ford Global Technologies, Inc. % Created 1/11/2000 switch lower(param) case 'levels'; obj.grid=set(obj.grid,'levels',data); l=limits(obj.candidateset); for n=1:length(data) l(obj.griddims(n),:)=[min(data{n}) max(data{n})]; end obj.candidateset=limits(obj.candidateset,l); case 'limits' obj.lattice= set(obj.lattice,'limits',data); l=limits(obj.candidateset); for n=1:length(data) l(obj.lattdims(n),:)=data{n}; end obj.candidateset=limits(obj.candidateset,l); case 'g' obj.lattice= set(obj.lattice,'g',data); case 'n' obj.lattice= set(obj.lattice,'n',data); case 'griddims' data2=setxor(data,1:nfactors(obj)); obj=i_changedims(obj,data,data2); case 'latticedims' data2=data; data=setxor(data2,1:nfactors(obj)); obj=i_changedims(obj,data,data2); end return function obj=i_changedims(obj,gdim,ldim) lims=limits(obj.candidateset); if length(gdim)>length(obj.griddims) % Expand nunmber of grid dims g=get(obj.lattice,'g'); obj.lattice=set(obj.lattice,'g',g(1:length(ldim))); obj.lattice=limits(obj.lattice,lims(ldim,:)); lvls=get(obj.grid,'levels'); for n=1+length(obj.griddims):length(gdim) lvls(end+1)={linspace(lims(n,1),lims(n,2),3)}; end obj.grid=set(obj.grid,'levels',lvls); elseif length(gdim)<length(obj.griddims) % Expand number of lattice dims lvls=get(obj.grid,'levels'); obj.grid= set(obj.grid,'levels',lvls(1:length(gdim))); g=get(obj.lattice,'g'); g= [g i_createg(length(ldim)-length(obj.lattdims),get(obj.lattice,'n'))]; obj.lattice=set(obj.lattice,'g',g); obj.lattice=limits(obj.lattice,lims(ldim,:)); end obj.griddims= gdim; obj.lattdims= ldim; return function g=i_createg(nf, N) % create a vector of primes, g, all less than N and preferably different g=primes(max(N/50,30)); g=g(5:end); if length(g)<nf g=g(floor(rand(1,nf)*(length(g)))+1); else g=g(randperm(length(g))); g=g(1:nf); end return