Changeset 37 for matlab

Show
Ignore:
Timestamp:
03/14/08 18:11:21 (16 years ago)
Author:
smidl
Message:

Matrix in Cholesky decomposition, Square-root Kalman and many bug fixes

Location:
matlab
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • matlab/testKF.m

    r33 r37  
    55        A=[1 -0.5; 1 0]; 
    66        B=[1;0.1]; 
    7         C=[1 0; 0 1]; 
    8         D=[0.1; 0]; 
    9         R=[1 0; 0 0.1]; 
     7        C=[1 0];%; 0 1]; 
     8        D=0.1;%[0.1; 0]; 
     9        R=0.1;%[1 0; 0 0.1]; 
    1010        Q=[0.2 0 ; 0 0.2];  
    1111 
     
    1313        sR = chol(R)'; 
    1414 
    15         N =1000; 
     15        N =3000; 
    1616        mu0 = [0;0]; 
    1717        P0 = 200*eye(2); 
    1818 
    19         u = rand(1,N); 
     19        u = zeros(1,N); 
    2020        x = zeros(2,N); 
    21         y = zeros(2,N); 
     21        y = zeros(1,N); 
    2222 
    2323        x(:,1) = [10;10]; 
    2424        Et = sQ*randn(2,N); 
    25         Wt = sR*randn(2,N); 
     25        Wt = sR*randn(1,N); 
    2626        for i=2:N; 
    2727                x(:,i) = A*x(:,i-1) + B*u(i) + Et(:,i); 
     
    4343OPt = P0; 
    4444ll =0; 
    45 Oxt2 = mu0; 
    46 OPt2 = P0; 
    47 ll2=0; 
     45oxt = mu0; 
     46oPt = chol(P0)'; 
     47oll=0; 
    4848 
     49tic; 
     50for t=2:N 
     51%       mu = A*mu + B*u(t); 
     52%       P  = A*P*A' + Q; 
     53%  
     54%       %Data update 
     55%       Ry = C*P*C' + R; 
     56%       iRy = inv(Ry); 
     57%       K = P*C'*iRy;  
     58%       P = P- K*C*P; % P = P -KCP; 
     59%       mu = mu + K*(y(:,t)-C*mu-D*u(t)); 
     60%       Mu(1:2,t)=mu; 
    4961 
    50 for t=2:N 
    51         mu = A*mu + B*u(t); 
    52         P  = A*P*A' + Q; 
    53  
    54         %Data update 
    55         Ry = C*P*C' + R; 
    56         iRy = inv(Ry); 
    57         K = P*C'*iRy;  
    58         P = P- K*C*P; % P = P -KCP; 
    59         mu = mu + K*(y(t)-C*mu-D*u(t)); 
    60         Mu(1:2,t)=mu; 
    61  
    62         [Oxt,OPt,ll(t)] = Kalman(Oxt,y(t),A,C,Q,R,OPt); 
    63         [Oxt2,OPt2,ll2(t)] = Kalman(Oxt2,y(t),A,C,Q,R/10000,OPt2); 
     62        [Oxt,OPt,ll(t)] = Kalman(Oxt,y(:,t),A,C,Q,R,OPt); 
     63%       [oxt,oPt,oll(t)] = KalmanSq(oxt,y(:,t),A,C,sQ,sR,oPt); 
     64        MuK(1:2,t) = Oxt; 
     65%       MuS(1:2,t) = oxt; 
    6466end 
    65  
    66 keyboard 
     67exec_matlab = toc 
     68%keyboard 
    6769 
    6870!cd ../;./tests/testKF 
     
    7274plot(x'); 
    7375hold on 
    74 plot(xth','--'); 
     76plot([zeros(size(xth,1),1) xth]','--'); % shift the predictions 
    7577plot(xth2','+'); 
    7678plot(xthE','o'); 
    77 plot(Mu',':'); 
    78 keyboard 
     79plot([zeros(size(xth,1),1) MuK]','d'); % shift the predictions 
     80 
     81exec_times 
     82exec_matlab./exec_times 
    7983end