resampleResidual.m
上传用户:zfsfly
上传日期:2018-05-24
资源大小:71k
文件大小:1k
源码类别:

matlab例程

开发平台:

Matlab

  1. function [ indx ] = resampleResidual( w )
  2. M = length(w);
  3. % "Repetition counts" (plus the random part, later on):
  4. Ns = floor(M .* w);
  5. % The "remainder" or "residual" count:
  6. R = sum( Ns );
  7. % The number of particles which will be drawn stocastically:
  8. M_rdn = M-R;
  9. % The modified weights:
  10. Ws = (M .* w - floor(M .* w))/M_rdn;
  11. % Draw the deterministic part:
  12. % ---------------------------------------------------
  13. i=1;
  14. for j=1:M,
  15.     for k=1:Ns(j),
  16.         indx(i)=j;
  17.         i = i +1;
  18.     end
  19. end;
  20. % And now draw the stocastic (Multinomial) part:
  21. % ---------------------------------------------------
  22. Q = cumsum(Ws);
  23. Q(M)=1; % Just in case...
  24. while (i<=M),
  25.     sampl = rand(1,1);  % (0,1]
  26.     j=1;
  27.     while (Q(j)<sampl),
  28.         j=j+1;
  29.     end;
  30.     indx(i)=j;
  31.     i=i+1;
  32. end
  33. % t = rand(M+1);
  34. % T = sort(t);
  35. % T(M+1) = 1; 
  36. % j=1;
  37. % while (i<=M),
  38. %     if (T(i)<Q(j)),
  39. %         indx(i)=j;
  40. %         i=i+1;
  41. %     else
  42. %         j=j+1;        
  43. %     end
  44. % end