function [n_cand,Cand_models]=spl_mv(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 % there is one n multivariate. Split into n multivariate with n-1 inputs n_cand=n_cand+1; Cand_models(n_cand)=Model; v=Model.Sub_Model(i).var; n_v=length(v); for j=1:n_v l_s=mod(j+n_v-1,n_v); if l_s==0 l_s=n_v; end if j1 new_var=v(1:l_s-1); else new_var=[]; end new_var=[new_var v(j:n_v)]; end if j==1 ret_var=n_v; else ret_var=j-1; end % new_var is the new multidemsional spline; see if it is already there found=0; k=1; while (~found) & (k<= Model.n_s_m) if length(Model.Sub_Model(k).var)==length(new_var) found=1; for l=1:length(new_var) found=found*(~isempty(Model.Sub_Model(k).var==new_var(l))); end end k=k+1; end if found % already existed. Let it be this one. !!! This needs to be changed !!! else % add a new one Cand_models(n_cand).n_s_m=Cand_models(n_cand).n_s_m+1; n_s_m=Cand_models(n_cand).n_s_m; Cand_models(n_cand).Sub_Model(n_s_m)=Cand_models(n_cand).Sub_Model(i); [n_kn,m_kn]=size(Cand_models(n_cand).Sub_Model(n_s_m).Knots); n_f=Cand_models(n_cand).Sub_Model(n_s_m).n_fun(n_kn); if ret_var==1 Knots=Cand_models(n_cand).Sub_Model(n_s_m).Knots(2:n_kn,:); n_Knots=Cand_models(n_cand).Sub_Model(n_s_m).n_Knots(2:n_kn); n_fun=Cand_models(n_cand).Sub_Model(n_s_m).n_fun(2:n_kn); order=Cand_models(n_cand).Sub_Model(n_s_m).order(2:n_kn); int_knots=Cand_models(n_cand).Sub_Model(n_s_m).int_knots(2:n_kn); x_min=Cand_models(n_cand).Sub_Model(n_s_m).x_min(2:n_kn); x_max=Cand_models(n_cand).Sub_Model(n_s_m).x_max(2:n_kn); var=Cand_models(n_cand).Sub_Model(n_s_m).var(2:n_kn); else Knots=[Cand_models(n_cand).Sub_Model(n_s_m).Knots(1:ret_var-1,:) Cand_models(n_cand).Sub_Model(n_s_m).Knots(ret_var+1:n_kn,:)]; n_Knots=[Cand_models(n_cand).Sub_Model(n_s_m).n_Knots(1:ret_var-1) Cand_models(n_cand).Sub_Model(n_s_m).n_Knots(ret_var+1:n_kn)]; n_fun=[Cand_models(n_cand).Sub_Model(n_s_m).n_fun(1:ret_var-1) Cand_models(n_cand).Sub_Model(n_s_m).n_fun(ret_var+1:n_kn)]; order=[Cand_models(n_cand).Sub_Model(n_s_m).order(1:ret_var-1) Cand_models(n_cand).Sub_Model(n_s_m).order(ret_var+1:n_kn)]; int_knots=[Cand_models(n_cand).Sub_Model(n_s_m).int_knots(1:ret_var-1) Cand_models(n_cand).Sub_Model(n_s_m).int_knots(ret_var+1:n_kn)]; x_min=[Cand_models(n_cand).Sub_Model(n_s_m).x_min(1:ret_var-1) Cand_models(n_cand).Sub_Model(n_s_m).x_min(ret_var+1:n_kn)]; x_max=[Cand_models(n_cand).Sub_Model(n_s_m).x_max(1:ret_var-1) Cand_models(n_cand).Sub_Model(n_s_m).x_max(ret_var+1:n_kn)]; var=[Cand_models(n_cand).Sub_Model(n_s_m).var(1:ret_var-1) Cand_models(n_cand).Sub_Model(n_s_m).var(ret_var+1:n_kn)]; end Cand_models(n_cand).Sub_Model(n_s_m).Knots=Knots; Cand_models(n_cand).Sub_Model(n_s_m).n_Knots=n_Knots; Cand_models(n_cand).Sub_Model(n_s_m).n_fun=n_fun; Cand_models(n_cand).Sub_Model(n_s_m).order=order; Cand_models(n_cand).Sub_Model(n_s_m).int_knots=int_knots; Cand_models(n_cand).Sub_Model(n_s_m).x_min=x_min; Cand_models(n_cand).Sub_Model(n_s_m).x_max=x_max; Cand_models(n_cand).Sub_Model(n_s_m).var=var; Cand_models(n_cand).Sub_Model(n_s_m).w=zeros(length(Cand_models(n_cand).Sub_Model(n_s_m).w)/n_f,1); Cand_models(n_cand).Sub_Model(n_s_m).a_w=ones(length(Cand_models(n_cand).Sub_Model(n_s_m).w),1); end end %remove the multidimensional sub-model n_s_m=Cand_models(n_cand).n_s_m; if i>1 S_M=Cand_models(n_cand).Sub_Model(1:i-1); S_M=[S_M Cand_models(n_cand).Sub_Model(i+1:n_s_m)]; else S_M=Cand_models(n_cand).Sub_Model(2:n_s_m); end Cand_models(n_cand).Sub_Model=S_M; Cand_models(n_cand).n_s_m=Cand_models(n_cand).n_s_m-1; end end if n_cand==0 Cand_models=[]; end