kalman_smoother.m
上传用户:mozhenmi
上传日期:2008-02-18
资源大小:13k
文件大小:1k
源码类别:

其他小程序

开发平台:

Matlab

  1. function [xsmooth, Vsmooth, VVsmooth, loglik] = kalman_smoother(y, A, C, Q, R, init_x, init_V)
  2. % Kalman smoother.
  3. % [xsmooth, Vsmooth, VVsmooth, loglik] = kalman_smoother(y, A, C, Q, R, init_x, init_V)
  4. %
  5. % We compute the smoothed state estimates based on all the observations, Y_1, ..., Y_T:
  6. %   xsmooth(:,t)    = E[x(t) | T]
  7. %   Vsmooth(:,:,t)  = Cov[x(t) | T]
  8. %   VVsmooth(:,:,t) = Cov[x(t), x(t-1) | T] for t>=2
  9. [os T] = size(y);
  10. ss = length(A);
  11. xsmooth = zeros(ss, T);
  12. Vsmooth = zeros(ss, ss, T);
  13. VVsmooth = zeros(ss, ss, T);
  14. % Forward pass
  15. [xfilt, Vfilt, VVfilt, loglik] = kalman_filter(y, A, C, Q, R, init_x, init_V);
  16. % Backward pass
  17. xsmooth(:,T) = xfilt(:,T);
  18. Vsmooth(:,:,T) = Vfilt(:,:,T);
  19. %VVsmooth(:,:,T) = VVfilt(:,:,T);
  20. for t=T-1:-1:1
  21.   [xsmooth(:,t), Vsmooth(:,:,t), VVsmooth(:,:,t+1)] = ...
  22.       smooth_update(xsmooth(:,t+1), Vsmooth(:,:,t+1), xfilt(:,t), Vfilt(:,:,t), ...
  23.       Vfilt(:,:,t+1), VVfilt(:,:,t+1), A, Q);
  24. end
  25. VVsmooth(:,:,1) = zeros(ss,ss);