function [n_cand,Cand_models]=refine_kv(Model,InpPat) n_cand=0; Cand_models=Model; n_s_b=Model.n_s_m; comp=0; for i=1:n_s_b comp=comp+sum(Model.Sub_Model(i).a_w); end [n_pat,n_inp]=size(InpPat); add_comp=n_pat-comp; % refine knot vector for k=1:n_s_b this_comp=sum(Model.Sub_Model(k).a_w); Cur_Model=getfield(Model,'Sub_Model',{k}); n_var=length(Cur_Model.var); for i=1:n_var pos=Cur_Model.order(i); this_one=pos+Cur_Model.int_knots(i); if this_comp/this_one*(this_one+1)<=add_comp for j=1:(Cur_Model.int_knots(i)+1) n_cand=n_cand+1; Cand_models(n_cand)=Model; n_knots=getfield(Cand_models(n_cand).Sub_Model(k),'n_Knots'); Knots=getfield(Cand_models(n_cand).Sub_Model(k),'Knots'); Knots=[Knots(i,1:pos) (Knots(i,pos)+Knots(i,pos+1))/2 Knots(i,(pos+1):n_knots(i))]; Cand_models(n_cand).Sub_Model(k).Knots(i,1:n_knots(i)+1)=Knots; Cand_models(n_cand).Sub_Model(k).n_Knots(i)=n_knots(i)+1; Cand_models(n_cand).Sub_Model(k).n_fun(i)=Cand_models(n_cand).Sub_Model(k).n_fun(i)+1; Cand_models(n_cand).Sub_Model(k).w=zeros(prod(Cand_models(n_cand).Sub_Model(k).n_fun),1); Cand_models(n_cand).Sub_Model(k).a_w=ones(length(Cand_models(n_cand).Sub_Model(k).w),1); Cand_models(n_cand).Sub_Model(k).int_knots(i)=Cand_models(n_cand).Sub_Model(k).int_knots(i)+1; pos=pos+1; end else disp(['This candidate -' num2str(k) ' - would generate ' num2str(comp+this_comp/this_one*(this_one+1)) ... ' complexity. Not enough training data!']); end end end