Changeset 32 for tests

Show
Ignore:
Timestamp:
03/03/08 13:00:32 (17 years ago)
Author:
smidl
Message:

test KF : estimation of R in KF is not possible! Likelihood of y_t is growing when R -> 0

Location:
tests
Files:
3 added
5 modified

Legend:

Unmodified
Added
Removed
  • tests/CMakeLists.txt

    r22 r32  
    66 
    77## Save all needed libraries in variable BdmLibs 
    8 SET(BdmLibs bdm itpp) 
     8SET(BdmLibs bdm itpp_debug) 
     9#SET(BdmLibs bdm itpp) 
    910 
    1011IF(WIN32) 
     
    2324add_executable (testPF testPF.cpp) 
    2425add_executable (testSmp testSmp.cpp) 
     26add_executable (testEpdf testEpdf.cpp) 
     27add_executable (testResample testResample.cpp) 
     28add_executable (testKF_QR testKF_QR.cpp) 
    2529 
    2630# Link the executable to the Hello library. 
     
    2933target_link_libraries (testPF ${BdmLibs}) 
    3034target_link_libraries (testSmp ${BdmLibs}) 
     35target_link_libraries (testEpdf ${BdmLibs}) 
     36target_link_libraries (testResample ${BdmLibs}) 
     37target_link_libraries (testKF_QR ${BdmLibs}) 
  • tests/test0.cpp

    r28 r32  
    1212{ 
    1313 
    14         RV th = RV ( "1 2","{a b }","1 1","0 0","0 0" ); 
     14        RV th = RV ( "1 2","{a b }","1 1","0 0"); 
    1515        RV r = RV ( "3 4" ); 
    1616 
    1717        cout << th << r << endl; 
    1818 
    19         ldmat ld = ldmat("1 0;-0.1 1","1.1 1.3"); 
     19        ldmat ld = ldmat("1 0;0.5 1","1.1 1.3"); 
    2020        vec v = "1 -0.1"; 
    2121         
  • tests/testKF.cpp

    r28 r32  
    1818        it_file fin( "testKF.it" ); 
    1919 
    20         mat Dt, Xt,Xt2,XtE; 
     20        mat Dt, Xt,Xt2,XtE,Xtf; 
    2121        int Ndat; 
    2222 
     
    4242        Xt=zeros( 2,Ndat ); 
    4343        Xt2=zeros( 2,Ndat ); 
     44        Xtf=zeros( 2,Ndat ); 
    4445        XtE=zeros( 2,Ndat ); 
    4546 
    4647//      cout << KF; 
    47         RV rx("1","{x}","2","0","0"); 
    48         RV ru("2","{u}","1","0","0"); 
    49         RV ry("3","{y}","1","0","0"); 
     48        RV rx("1","{x}","2","0"); 
     49        RV ru("2","{u}","1","0"); 
     50        RV ry("3","{y}","1","0"); 
    5051        // 
    5152        Kalman<ldmat> KF(rx,ry,ru); 
     
    6566        KFE.set_est(mu0,P0); 
    6667 
    67         Xt.set_col( 0,*((enorm<ldmat>*)(KF._epdf()))->_mu() ); 
     68        epdf& KFep = KF._epdf(); 
     69        epdf& KFfep = KFf._epdf(); 
     70        epdf& KFEep = KFE._epdf(); 
     71         
     72        Xt.set_col( 0,KFep.mean() ); 
     73        Xtf.set_col( 0,KFfep.mean() ); 
    6874        Xt2.set_col( 0,KF2.mu ); 
    69         XtE.set_col( 0,*((enorm<ldmat>*)(KFE._epdf()))->_mu() ); 
     75        XtE.set_col( 0,KFEep.mean() ); 
    7076        for ( int t=1;t<Ndat;t++ ) { 
    7177                KFf.bayes( Dt.get_col( t )); 
    7278                KF.bayes( Dt.get_col( t )); 
    7379                KF2.bayes( Dt.get_col( t )); 
    74 //              KFE.bayes( Dt.get_col( t )); 
    75                 Xt.set_col(t,*((enorm<ldmat>*)(KF._epdf()))->_mu()); 
     80                KFE.bayes( Dt.get_col( t )); 
     81                Xt.set_col( t,KFep.mean() ); 
     82                Xtf.set_col( t,KFfep.mean() ); 
    7683                Xt2.set_col(t,KF2.mu); 
    77                 XtE.set_col(t,*((enorm<ldmat>*)(KFE._epdf()))->_mu()); 
     84                XtE.set_col( t,KFEep.mean() ); 
    7885        } 
    7986 
    8087        it_file fou( "testKF_res.it" ); 
    8188        fou << Name("xth") << Xt; 
     89        fou << Name("xthf") << Xtf; 
    8290        fou << Name("xth2") << Xt2; 
    8391        fou << Name("xthE") << XtE; 
  • tests/testPF.cpp

    r19 r32  
    1313 
    1414        RV x("1"); 
    15         RV xm=x; xm.t(-1); 
     15        RV xm=x; xm.t(-1);const 
    1616        RV y("2"); 
    1717         
     
    1919        vec vR = "1"; 
    2020        ldmat R(vR); 
     21                 
     22        eEmp emp(x,10); 
     23        euni eun(x); 
     24        eun.set_parameters("0","1"); 
     25        emp.set_parameters(ones(10),&eun); 
     26        vec &v=emp._w(); 
     27        Array<vec> &S=emp._samples(); 
    2128         
     29        for (int i=0;i<10;i++){ v(i) = exp(-0.5*sum(pow(S(i)-1,2.0))*10);} 
     30        v/=sum(v); 
    2231         
    23         vec ptc = randn(10); 
    24         vec w = exp(-0.5*(pow(ptc,2))/0.2); 
     32        cout << "p:" << S << endl; 
     33        cout << "w:" << v << endl; 
    2534         
    26         cout << "p:" << ptc << endl; 
    27         cout << "w:" << w << endl; 
    28          
    29         PF pf(w); 
    30         ivec ind = pf.resample(); 
     35        ivec ind = emp.resample(); 
    3136         
    3237        cout << ind << endl; 
    33         /* 
    34         mlnorm<ldmat> obs(x,xm,A,R); 
    35         mlnorm<ldmat> par(y,x,A,R); 
    3638         
    37         TrivialPF TPF(obs,par,10); 
    38         */ 
    3939        //Exit program: 
    4040        return 0; 
  • tests/testSmp.cpp

    r28 r32  
    88using std::endl; 
    99 
     10void disp(const vec &tmu, const mat &tR,const mat &Smp){ 
     11        int N = Smp.cols(); 
     12        vec Emu = Smp*ones(N) /N ; 
     13        mat Er = (Smp*Smp.transpose())/N - outer_product(Emu,Emu); 
     14        cout << "True mu:" << tmu <<endl; 
     15        cout << "Emp  mu:" << Emu <<endl; 
     16         
     17        cout << "True R:" << tR <<endl; 
     18        cout << "Emp  R:" << Er <<endl; 
     19} 
     20 
    1021int main() { 
    1122 
    12         //RNG_randomize(); 
     23        RNG_randomize(); 
    1324 
    14         RV rv("1","{x }","2","0","0"); 
     25        RV rv("1","{x }","2","0"); 
    1526        int N = 10000; //number of samples 
    1627        vec mu0 = "1.5 1.7"; 
    1728        mat V0("1.2 0.3; 0.3 5"); 
    1829        ldmat R = ldmat(V0); 
     30         
     31        cout << "====== ENorm ====== " <<endl; 
    1932        enorm<ldmat> eN(rv); 
    2033        eN.set_parameters(mu0,R); 
     34        mat Smp = eN.sample(N); 
     35 
     36        disp(mu0,R.to_mat(),Smp); 
     37 
     38        cout << "====== MlNorm ====== " <<endl; 
     39        mat I = eye(2); 
     40        vec lik(N); 
     41        mlnorm<ldmat> ML(rv,rv); 
     42        ML.set_parameters(I,R); 
     43        Smp = ML.samplecond(mu0,lik,N); 
    2144         
    22         mat Smp = eN.sample(N); 
    23         cout << "True:" <<endl; 
    24         cout << "mu:" << mu0 ; 
    25         cout << "R:" << R ; 
    26         cout << "R:" << R.to_mat() ; 
     45        disp(mu0,R.to_mat(),Smp); 
     46 
     47        cout << "====== EGamma ====== " <<endl;  
     48        vec a = "100000,10000"; 
     49        vec b = a/10.0; 
     50        egamma eG(rv); 
     51        eG.set_parameters(a,b); 
    2752         
    28         vec Emu = Smp*ones(N) /N ; 
    29         cout << "Empirical:" <<endl; 
    30         cout << "mu:" << Emu; 
    31         cout << "R:" << (Smp*Smp.transpose())/N - Emu*Emu.transpose() <<endl; 
     53        Smp = eG.sample(N); 
     54 
     55        vec g_mu = elem_div(a,b); 
     56        vec g_var = elem_div(a,pow(b,2.0)); 
     57        disp(g_mu,diag(g_var),Smp); 
     58 
     59        cout << "====== MGamma ====== " <<endl;  
     60        mgamma mG(rv,rv); 
     61        double k = 10.0; 
     62        mG.set_parameters(k); 
     63 
     64        Smp=mG.samplecond(mu0,lik,N); 
     65        disp(mu0,pow(mu0,2.0)/k,Smp); 
    3266 
    3367        //Exit program: 
     
    3569 
    3670} 
     71