function [n_cand,Cand_models]=add_uni_sm(Model,InpPat,order); n_cand=0; n_s_b=Model.n_s_m; [n_pat,n_var]=size(InpPat); %determine current complexity comp=0; for i=1:n_s_b comp=comp+sum(Model.Sub_Model(i).a_w); end add_comp=n_pat-comp; % determine if it is going to add another univariate sub-model pre_var=zeros(1,n_var); for i=1:n_s_b n_var_i=Model.Sub_Model(i).var; for j=1:length(n_var_i) pre_var(n_var_i(j))=1; end end add_var=ones(1,n_var)-pre_var; for i=1:n_var if add_var(i)==1 if order<=add_comp % add variable x_min=min(InpPat); x_max=max(InpPat)+10*eps*ones(1,n_var); [Knots,n_Knots,n_fun,w,a_w]=create_B_spline(x_min(i),x_max(i),0,order); n_cand=n_cand+1; Cand_models(n_cand)=Model; n_s_b1=n_s_b+1; Cand_models(n_cand).n_s_m=n_s_b+1; Cand_models(n_cand).Sub_Model(n_s_b1).Knots=Knots; Cand_models(n_cand).Sub_Model(n_s_b1).n_Knots=n_Knots; Cand_models(n_cand).Sub_Model(n_s_b1).n_fun=n_fun; Cand_models(n_cand).Sub_Model(n_s_b1).w=w; Cand_models(n_cand).Sub_Model(n_s_b1).a_w=a_w; Cand_models(n_cand).Sub_Model(n_s_b1).x_min=x_min(i); Cand_models(n_cand).Sub_Model(n_s_b1).x_max=x_max(i); Cand_models(n_cand).Sub_Model(n_s_b1).order=order; Cand_models(n_cand).Sub_Model(n_s_b1).int_knots=0; Cand_models(n_cand).Sub_Model(n_s_b1).var=i; else disp(['This candidate -' num2str(new_var) ' - would generate ' num2str(comp+new_comp) ... ' complexity. Not enough training data!']); end end end if n_cand==0 Cand_models=[]; end