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

    function [Feats,Defaults,Values]= features(f);
% POLYNOM/FEATURES

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



m= f.order;

% knots
n= length(f.knots);
for i=1:n
   Feats(i).Display = sprintf('Knot_%1d',i);
   Feats(i).Function= sprintf('invcode(f,p(%d))',i);
   Feats(i).delG    = sprintf('delknot(f,%d)',i);
   Feats(i).Name    = sprintf('Knot_%1d',i);
   Feats(i).IsDatum = 0;
   Feats(i).index= i;
   Feats(i).IsLinear= 0;
end
% other parameters
j=0;
tsstat= Terms(f);
for i=1:f.order
   if tsstat(i)
      j=j+1;
      Feats(n+j).Display = sprintf('B_%1d',f.order-i);
      Feats(n+j).Function= sprintf('p(%d)',j+n);
      Feats(n+j).delG    = sprintf('delparam(f,%d)',j+n);
      Feats(n+j).Name    = sprintf('B_%1d',f.order-i);
      Feats(n+j).IsDatum = 0;
      Feats(n+j).index    = n+j;
      Feats(n+j).IsLinear = 1;
   end
end
n= n+j;
for i=1:length(f.knots);
   Feats(n+i).Display = sprintf('B_s%1d',i);
   Feats(n+i).Function= sprintf('p(%d)',i+n);
   Feats(n+i).delG    = sprintf('delparam(f,%d)',i+n);
   Feats(n+i).Name    = sprintf('B_s%1d',i);
   Feats(n+i).IsDatum = 0;
   Feats(n+i).index    = n+i;
   Feats(n+i).IsLinear = 1;
end
n= n+length(f.knots);


%% set up features to be derivatives 1,2,...,order-1
%% note index=1 is left free
for i=1:f.order-1
    Fpoly(i).Display = ['f',repmat('''',1,i),'(x)'];
    Fpoly(i).Function= sprintf('eval(diff(f,%d),code(f,f.Values(i)))',i);
    Fpoly(i).delG    = sprintf('hermiteX(f,code(f,f.Values(i)),%d)',i);
    Fpoly(i).Name    = sprintf('D%1d',i);
    Fpoly(i).IsDatum = 0;
    Fpoly(i).index = n+i;
    Fpoly(i).IsLinear = 0;
end

Fval= struct('Display','f(x)',...
      'Function','eval(f,code(f,f.Values(i,:)))',...
      'delG','hermiteX(f,code(f,f.Values(i,:)))',...
      'Name','FX',...
      'IsDatum',0,...
		'index',n+f.order,...
		'IsLinear',0);

Feats= [Feats Fpoly Fval];



if nargout==3
   nk=length(f.knots);
   Defaults=[1:size(f,1)];
   Values= zeros(size(f,1),1);
end