multinomialR.m
上传用户:hfch80
上传日期:2007-10-25
资源大小:3637k
文件大小:1k
- function outIndex = multinomialR(inIndex,q);
- % PURPOSE : Performs the resampling stage of the SIR
- % in order(number of samples) steps.
- % INPUTS : - inIndex = Input particle indices.
- % - q = Normalised importance ratios.
- % OUTPUTS : - outIndex = Resampled indices.
- % AUTHORS : Arnaud Doucet and Nando de Freitas - Thanks for the acknowledgement.
- % DATE : 08-09-98
- if nargin < 2, error('Not enough input arguments.'); end
- [S,arb] = size(q); % S = Number of particles.
- % MULTINOMIAL SAMPLING:
- % =====================
- N_babies= zeros(1,S);
- cumDist= cumsum(q');
- % generate S ordered random variables uniformly distributed in [0,1]
- % high speed Niclas Bergman Procedure
- u = fliplr(cumprod(rand(1,S).^(1./(S:-1:1))));
- j=1;
- for i=1:S
- while (u(1,i)>cumDist(1,j))
- j=j+1;
- end
- N_babies(1,j)=N_babies(1,j)+1;
- end;
- % COPY RESAMPLED TRAJECTORIES:
- % ============================
- index=1;
- for i=1:S
- if (N_babies(1,i)>0)
- for j=index:index+N_babies(1,i)-1
- outIndex(j) = inIndex(i);
- end;
- end;
- index= index+N_babies(1,i);
- end