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

波变换

开发平台:

Matlab

  1. function t = expand(t)
  2. %EXPAND Expand data tree.
  3. %   NEWT = EXPAND(T) decomposes the initial data
  4. %   associated with the root of the data tree T
  5. %   to obtain terminal nodes datas.
  6. %
  7. %   During the splitting, EXPAND computes the
  8. %   general information associated with each
  9. %   node of T.
  10. %
  11. %   See also DTREE.
  12. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 15-Oct-96.
  13. %   Last Revision: 21-May-2003.
  14. %   Copyright 1995-2004 The MathWorks, Inc.
  15. %   $Revision: 1.5.4.2 $  $Date: 2004/03/15 22:37:28 $
  16. order = treeord(t);
  17. depth = treedpth(t);
  18. [tnrank,nodes] = findactn(t);
  19. n2dec = nodes(tnrank==0);
  20. nbTOT = nbnodes(order,depth);
  21. x     = fmdtree('getinit',t);
  22. aninf = defaninf(t,0,{x});
  23. t     = fmdtree('setinit',t,aninf,'expand');
  24. data  = cell(nbTOT,1);
  25. data{1} = x;
  26. for j=1:length(n2dec)
  27.     node = n2dec(j);
  28.     ind  = node+1;
  29.     x = data{ind};    
  30.     tnval = split(t,node,x);
  31.     child = node*order+[1:order]';
  32.     i_c   = child+1;
  33.     for k =1:order
  34.         data{i_c(k)} = tnval{k};
  35.         t.allNI(i_c(k),2:3) = size(tnval{k});
  36.     end
  37.     data{ind} = {};
  38.     aninf = defaninf(t,child,tnval);
  39.     t.allNI(i_c,4:end) = aninf;
  40. end
  41. ind_an  = allnodes(t)+1;
  42. ind_tn  = leaves(t)+1;
  43. sizes   = t.allNI(ind_tn,2:3);
  44. t.allNI = t.allNI(ind_an,:);
  45. lenTOT  = sum(prod(sizes,2));
  46. tmpTMP = zeros(1,lenTOT);
  47. iBEG = 1;
  48. for k=1:length(ind_tn)
  49.     idx = ind_tn(k);
  50.     iEND = iBEG + prod(sizes(k,:),2)-1;
  51.     tmpTMP(iBEG:iEND) = data{idx}(:)';
  52.     iBEG = iEND + 1;
  53. end
  54. t = fmdtree('tn_write',t,sizes,tmpTMP);
  55. %----------------------------------------------
  56. function nb = nbnodes(order,depth)
  57. switch order
  58.   case 0    , nb = 0;
  59.   case 1    , nb= depth;
  60.   otherwise , nb = (order^(depth+1)-1)/(order-1);
  61. end
  62. %----------------------------------------------