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

其他小程序

开发平台:

Matlab

  1. % Make a point move in the 2D plane
  2. % State = (x y xdot ydot). We only observe (x y).
  3. % Generate data from this process, and try to learn the dynamics back.
  4. % X(t+1) = F X(t) + noise(Q)
  5. % Y(t) = H X(t) + noise(R)
  6. ss = 4; % state size
  7. os = 2; % observation size
  8. F = [1 0 1 0; 0 1 0 1; 0 0 1 0; 0 0 0 1]; 
  9. H = [1 0 0 0; 0 1 0 0];
  10. Q = 0.1*eye(ss);
  11. R = 1*eye(os);
  12. initx = [10 10 1 0]';
  13. initV = 10*eye(ss);
  14. seed = 9;
  15. rand('state', seed);
  16. randn('state', seed);
  17. T = 50;
  18. [x,y] = sample_lds(F, H, Q, R, initx, T);
  19. % Initializing the params to sensible values is crucial.
  20. % Here, we use the true values for everything except F and H,
  21. % which we initialize randomly (bad idea!)
  22. % Lack of identifiability means the learned params. are often far from the true ones.
  23. % All that EM guarantees is that the likelihood will increase.
  24. F1 = randn(ss,ss);
  25. H1 = randn(os,ss);
  26. Q1 = Q;
  27. R1 = R;
  28. initx1 = initx;
  29. initV1 = initV;
  30. max_iter = 10;
  31. [F2, H2, Q2, R2, initx2, initV2, LL] =  learn_kalman(y, F1, H1, Q1, R1, initx1, initV1, max_iter);