multinomialR.m
上传用户:hfch80
上传日期:2007-10-25
资源大小:3637k
文件大小:1k
源码类别:

行业发展研究

开发平台:

Matlab

  1. function outIndex = multinomialR(inIndex,q);
  2. % PURPOSE : Performs the resampling stage of the SIR
  3. %           in order(number of samples) steps.
  4. % INPUTS  : - inIndex = Input particle indices.
  5. %           - q = Normalised importance ratios.
  6. % OUTPUTS : - outIndex = Resampled indices.
  7. % AUTHORS  : Arnaud Doucet and Nando de Freitas - Thanks for the acknowledgement.
  8. % DATE     : 08-09-98
  9. if nargin < 2, error('Not enough input arguments.'); end
  10. [S,arb] = size(q);  % S = Number of particles.
  11. % MULTINOMIAL SAMPLING:
  12. % =====================
  13. N_babies= zeros(1,S);
  14. cumDist= cumsum(q');   
  15. % generate S ordered random variables uniformly distributed in [0,1]
  16. % high speed Niclas Bergman Procedure
  17. u = fliplr(cumprod(rand(1,S).^(1./(S:-1:1))));
  18. j=1;
  19. for i=1:S
  20.   while (u(1,i)>cumDist(1,j))
  21.     j=j+1;
  22.   end
  23.   N_babies(1,j)=N_babies(1,j)+1;
  24. end;
  25. % COPY RESAMPLED TRAJECTORIES:  
  26. % ============================
  27. index=1;
  28. for i=1:S
  29.   if (N_babies(1,i)>0)
  30.     for j=index:index+N_babies(1,i)-1
  31.       outIndex(j) = inIndex(i);
  32.     end;
  33.   end;   
  34.   index= index+N_babies(1,i);   
  35. end