www.gusucode.com > mbcmodels 工具箱 matlab 源码程序 > mbcmodels/@xregcubic/termCount.m

    function mvp= termCount(mvp,order,MaxInteract);
%TERMCOUNT

%  Copyright 2000-2004 The MathWorks, Inc. and Ford Global Technologies, Inc.




if nfactors(mvp)>1
	% Number of cubic, quadratics, linear factors 
	mord= max([order,3]);
	reord=[];
	for i=0:mord
		reord= [find(order==i) reord];
	end
	% Factors must be reordered from highest to lowest order
	% Note flipup(sort(order)) is not used as order is changed too much
	mvp.reorder= reord;
	
	N= zeros(1,mord);
	N(end)= sum(order==mord);
	for i= mord-1:-1:1
		N(i)= sum(order>=i);
	end
	mvp.N = N;
	
	
	% This loop is the standard nested loop for xregcubic
	% Here it is used to count number of coefficients 
	% This could be generalised with a recursive function
	N2=N;
	N2(MaxInteract+1:end)=0;
	len= i_counter(N2,1,1);
	
	len= len + sum(N(MaxInteract+1:end));
	
	mvp.MaxInteract= MaxInteract;
else
	if ~isempty(order)
		len= order+1;
		mvp.MaxInteract= order;
		mvp.N= zeros(1,max(order,3));
		mvp.N(1:order)= 1;
		mvp.reorder=1;
	else
		mvp.MaxInteract= 0;
		mvp.N= zeros(1,3);
		len=0;
	end
end

mvp= update(mvp,1:len);


% recusive counter
function len= i_counter(N,lvl,st)

mord= length(N);
len=1;
for i=st:N(lvl)
	if lvl<mord;
		len= len + i_counter(N,lvl+1,i);
	else
		len= len+1;
	end
end