dtree.m
上传用户:haiyisale
上传日期:2013-01-09
资源大小:3246k
文件大小:3k
源码类别:

波变换

开发平台:

Matlab

  1. function [t,nbtn] = dtree(varargin)
  2. %DTREE Constructor for the class DTREE.
  3. %   T = DTREE(ORD,D,X) returns a complete data tree
  4. %   object of order ORD and depth D. The data associated 
  5. %   with the tree T is X.
  6. %
  7. %   With T = DTREE(ORD,D,X,USERDATA) you may set a 
  8. %   userdata field.
  9. %
  10. %   [T,NB] = DTREE(...) returns also the number of
  11. %   terminal nodes (leaves) of T.
  12. %
  13. %   T = DTREE('PropName1',PropValue1,'PropName2',PropValue2,...)
  14. %   is the most general syntax to construct a DTREE object.
  15. %   The valid choices for 'PropName' are:
  16. %     'order' : Order of tree.
  17. %     'depth' : Depth of tree.
  18. %     'data'  : Data associated to the tree.
  19. %     'spsch' : Split scheme for nodes.
  20. %     'ud'    : Userdata field.
  21. %
  22. %   The Split scheme field is an ORD by 1 logical array.
  23. %   The root of the tree may be split and it has ORD children.
  24. %   You may split the j-th child if SPSCH(j) = 1.
  25. %   Each node that you may split has the same property as
  26. %   the root node.
  27. %
  28. %   The function DTREE returns a DTREE object.
  29. %   For more information on object fields, type: help dtree/get.  
  30. %
  31. %   See also NTREE, WTBO.
  32. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 15-Oct-96.
  33. %   Last Revision: 22-May-2003.
  34. %   Copyright 1995-2004 The MathWorks, Inc.
  35. %   $Revision: 1.7.4.2 $  $Date: 2004/03/15 22:37:27 $
  36. %===============================================
  37. % Class DTREE (Parent objects: NTREE)
  38. % Fields:
  39. %   ntree - Parent object
  40. %   allNI - All Nodes Information
  41. %   terNI - Terminal Nodes Information
  42. %===============================================
  43. % Check arguments.
  44. nbIn = nargin;
  45. if nbIn > 12
  46.   error('Too many input arguments.');
  47. end
  48. % Defaults;
  49. order = 2;
  50. depth = 0;
  51. ud    = [];
  52. spsch = true(order,1);
  53. spflg = true;
  54. data  = 0;
  55. % Check.
  56. argNam = {'order','depth','data','spflg','spsch','ud'};
  57. argFlg = zeros(length(argNam),1);
  58. k = 1;
  59. while k<=nbIn
  60.    j = min(find(argFlg==0));
  61.    if isempty(j) , break; end
  62.    if ischar(varargin{k}) && (j<7)
  63.        j = find(strcmp(argNam,varargin{k}));
  64.        if isempty(j)
  65.            if isequal(argFlg(1:3),[1 1 1]') && (k==nbIn)
  66.                j = 6; k = k-1;
  67.            else
  68.                msg = sprintf('Invalid argument name: %s', varargin{k});
  69.                error(msg);
  70.            end
  71.        end
  72.        k = k+1;
  73.    elseif isequal(argFlg(1:3),[1 1 1]') && (k==nbIn)
  74.        j = 6;  
  75.    end
  76.    argFlg(j) = 1;
  77.    field = argNam{j};
  78.    eval([field ' = varargin{' sprintf('%0.f',k) '};'])    
  79.    k = k+1;    
  80. end
  81. flagexp = true;
  82. try 
  83.   spflg = logical(spflg);
  84.   flagexp = spflg;
  85.   if length(flagexp)~=1 , flagexp = true; end
  86. catch
  87.   if ischar(spflg)
  88.      if ~strcmp(spflg,'expand') , flagexp = false; end
  89.   end
  90. end
  91. [t,nbtn]  = ntree(order,depth,spsch,ud);
  92. obj.allNI = [];
  93. obj.terNI = [];
  94. t = class(obj,'dtree',t);
  95. t = set(t,'wtboInfo',class(t));
  96. t = fmdtree('setinit',t,data);
  97. if flagexp , t = expand(t); end