function [n_cand,Cand_models]=dec_ord_sm(Model,InpPat); n_cand=0; n_s_b=Model.n_s_m; for i=1:n_s_b if length(Model.Sub_Model(i).var)==1 if Model.Sub_Model(i).int_knots==0 % there is one to reduce % see if we can remove it if Model.Sub_Model(i).order==2 if Model.n_s_m>1 % yes we can n_cand=n_cand+1; Cand_models(n_cand)=Model; if i>1 S_M=Model.Sub_Model(1:i-1); end S_M(i:Model.n_s_m-1)=Model.Sub_Model(i+1:n_s_b); Cand_models(n_cand).Sub_Model=S_M; Cand_models(n_cand).n_s_m=Cand_models(n_cand).n_s_m-1; end else % just reduce the order n_cand=n_cand+1; Cand_models(n_cand)=Model; Cand_models(n_cand).Sub_Model(i).order=Cand_models(n_cand).Sub_Model(i).order-1; n_k=Cand_models(n_cand).Sub_Model(i).n_Knots Cand_models(n_cand).Sub_Model(i).Knots=Cand_models(n_cand).Sub_Model(i).Knots(2:n_k-1); Cand_models(n_cand).Sub_Model(i).n_Knots=n_k-2; Cand_models(n_cand).Sub_Model(i).n_fun=Cand_models(n_cand).Sub_Model(i).n_fun-1; Cand_models(n_cand).Sub_Model(i).w=zeros(Cand_models(n_cand).Sub_Model(i).n_fun,1); Cand_models(n_cand).Sub_Model(i).a_w=ones(Cand_models(n_cand).Sub_Model(i).n_fun,1); end end end end if n_cand==0 Cand_models=[]; end