Changeset 229

Show
Ignore:
Timestamp:
01/15/09 10:53:54 (15 years ago)
Author:
smidl
Message:

epdf has a new function: variance()

Files:
8 modified

Legend:

Unmodified
Added
Removed
  • bdm/estim/ekf_templ.h

    r141 r229  
    2929}; 
    3030 
     31//!Extended Kalman filter in Choleski form with unknown \c Q 
     32class EKFCh_unQ : public EKFCh , public BMcond { 
     33public: 
     34        //! Default constructor 
     35        EKFCh_unQ ( RV rx, RV ry,RV ru,RV rQ ) :EKFCh ( rx,ry,ru ),BMcond ( rQ ) {}; 
     36        void condition ( const vec &Q0 ) { 
     37                Q.setD ( Q0,0 ); 
     38                //from EKF 
     39                preA.set_submatrix ( dimy+dimx,dimy,Q._Ch() ); 
     40        }; 
     41}; 
    3142 
    3243#endif //EKF_TEMP_H 
  • bdm/estim/libPF.h

    r225 r229  
    8888                        // ugly 
    8989                        vec pom=zeros ( ( Coms ( 0 )->_rv() ).count() ); 
    90  
    9190                        for ( int i=0; i<_w.length(); i++ ) {pom += Coms ( i )->mean() * _w ( i );} 
    92  
    9391                        return concat ( E.mean(),pom ); 
     92                } 
     93                vec variance() const { 
     94                        // ugly 
     95                        vec pom=zeros ( ( Coms ( 0 )->_rv() ).count() ); 
     96                        vec pom2=zeros ( ( Coms ( 0 )->_rv() ).count() ); 
     97                        for ( int i=0; i<_w.length(); i++ ) { 
     98                                pom += Coms ( i )->mean() * _w ( i ); 
     99                                pom2 += (Coms ( i )->variance() + pow(Coms(i)->mean(),2)) * _w ( i );} 
     100                        return concat ( E.variance(),pom2-pow(pom,2) ); 
    94101                } 
    95102 
  • bdm/estim/merger.h

    r211 r229  
    102102                return tmp; 
    103103        } 
    104         mat variance() const { 
     104        mat covariance() const { 
    105105                const vec &w = eSmp._w(); 
    106106                const Array<vec> &S = eSmp._samples(); 
     
    115115                } 
    116116                return Tmp-outer_product(mea,mea); 
     117        } 
     118        vec variance() const { 
     119                const vec &w = eSmp._w(); 
     120                const Array<vec> &S = eSmp._samples(); 
     121                 
     122                vec tmp=zeros(rv.count()); 
     123                for ( int i=0; i<Ns; i++ ) { 
     124                        tmp+=w ( i ) *pow(S ( i ),2); 
     125                } 
     126                return tmp-pow(mean(),2); 
    117127        } 
    118128//! for future use 
  • bdm/stat/emix.h

    r224 r229  
    104104                for ( i = 0;i < w.length();i++ ) {mu += w ( i ) * Coms ( i )->mean(); } 
    105105                return mu; 
     106        } 
     107        vec variance() const { 
     108                //non-central moment 
     109                vec mom2 = zeros(rv.count()); 
     110                for ( int i = 0;i < w.length();i++ ) {mom2 += w ( i ) * pow(Coms ( i )->mean(),2); } 
     111                //central moment 
     112                return mom2-pow(mean(),2); 
    106113        } 
    107114        double evallog ( const vec &val ) const { 
     
    243250                return tmp; 
    244251        } 
     252        vec variance() const { 
     253                vec tmp ( rv.count() ); //second moment 
     254                for ( int i=0;i<epdfs.length();i++ ) { 
     255                        vec pom = epdfs ( i )->mean(); 
     256                        dls ( i )->fill_val ( tmp, pow(pom,2) ); 
     257                } 
     258                return tmp-pow(mean(),2); 
     259        } 
    245260        vec sample() const { 
    246261                vec tmp ( rv.count() ); 
  • bdm/stat/libBM.h

    r225 r229  
    197197        virtual vec mean() const =0; 
    198198 
     199        //! return expected variance (not covariance!) 
     200        virtual vec variance() const = 0; 
     201         
    199202        //! Destructor for future use; 
    200203        virtual ~epdf() {}; 
  • bdm/stat/libEF.h

    r225 r229  
    132132        double lognc () const; 
    133133        vec mean() const {return mu;} 
     134        vec variance() const {return diag(R.to_mat());} 
    134135//      mlnorm<sq_T>* condition ( const RV &rvn ) const ; 
    135136        mpdf* condition ( const RV &rvn ) const ; 
     
    192193        vec sample() const; 
    193194        vec mean() const; 
     195        vec variance() const{it_error("Not implemented"); return vec(0);}; 
    194196        void mean_mat ( mat &M, mat&R ) const; 
    195197        //! In this instance, val= [theta, r]. For multivariate instances, it is stored columnwise val = [theta_1 theta_2 ... r_1 r_2 ] 
     
    220222        //!sufficient statistics 
    221223        vec beta; 
     224        //!speedup variable 
     225        double gamma; 
    222226public: 
    223227        //!Default constructor 
     
    226230        eDirich ( const eDirich &D0 ) : eEF ( D0.rv ),beta ( D0.beta ) {}; 
    227231        vec sample() const {it_error ( "Not implemented" );return vec_1 ( 0.0 );}; 
    228         vec mean() const {return beta/sum ( beta );}; 
     232        vec mean() const {return beta/gamma;}; 
     233        vec variance() const {return elem_mult(beta,(beta+1))/ (gamma*(gamma+1));} 
    229234        //! In this instance, val is ... 
    230235        double evallog_nn ( const vec &val ) const {double tmp; tmp=( beta-1 ) *log ( val );            it_assert_debug(std::isfinite(tmp),"Infinite value"); 
     
    248253                } 
    249254                beta= beta0; 
     255                gamma = sum(beta); 
    250256        } 
    251257}; 
     
    327333        //! Returns poiter to alpha and beta. Potentially dengerous: use with care! 
    328334        void _param ( vec* &a, vec* &b ) {a=&alpha;b=&beta;}; 
    329         vec mean() const {vec pom ( alpha ); pom/=beta; return pom;} 
     335        vec mean() const {return elem_div(alpha,beta);} 
     336        vec variance() const {return elem_div(alpha,elem_mult(beta,beta)); } 
    330337}; 
    331338 
     
    365372                void _param ( vec* &a, vec* &b ) {a=alpha;b=beta;}; 
    366373                vec mean() const {return elem_div(*beta,*alpha-1);} 
     374                vec variance() const {vec mea=mean(); return elem_div(elem_mult(mea,mea),*alpha-2);} 
    367375}; 
    368376/* 
     
    416424                lnk = log ( nk ); 
    417425        } 
    418         vec mean() const {vec pom=high; pom-=low; pom/=2.0; return pom;} 
     426        vec mean() const {return (high-low)/2.0;} 
     427        vec variance() const {return (pow(high,2)+pow(low,2)+elem_mult(high,low))/3.0;} 
    419428}; 
    420429 
     
    646655                return pom; 
    647656        } 
     657        vec variance() const { 
     658                vec pom=zeros ( rv.count() ); 
     659                for ( int i=0;i<n;i++ ) {pom+=pow(samples ( i ),2) *w ( i );} 
     660                return pom-pow(mean(),2); 
     661        } 
    648662}; 
    649663 
  • matlab/pmsm/mpf_test_disp.m

    r225 r229  
    88 
    99figure(2) 
     10StdX = 2*sqrt(VarE); 
    1011for i=1:4 
    1112        subplot(4,1,i) 
     
    1314        hold on; 
    1415        plot(xthE(:,i)','r') 
     16    plot(xthE(:,i) - StdX(:,i),'r:'); 
     17    plot(xthE(:,i) + StdX(:,i),'r:'); 
    1518        plot(xthM(:,i+4)','g') 
    1619%       plot(xthV(i,:)','m'); 
     
    1821 
    1922figure(3) 
     23StdM = 2*sqrt(VarM); 
    2024for i=1:4 
    2125        subplot(4,1,i) 
    2226        plot(xthM(:,i)') 
     27    hold on 
     28    plot(xthM(:,i)-StdM(:,i),':') 
     29    plot(xthM(:,i)+StdM(:,i),':') 
    2330    if i<4 
    2431        %set(gca,'XTick',[]); 
     
    2734    end 
    2835    ylabel(['Q(' num2str(i) ',' num2str(i) ')']); 
    29     hold on 
    30         plot(Qtr(:,i)','--') 
     36    plot(Qtr(:,i)','--') 
    3137end 
    3238 
  • pmsm/mpf_test.cpp

    r227 r229  
    1515#include <estim/libKF.h> 
    1616#include <estim/libPF.h> 
     17#include <estim/ekf_templ.h> 
    1718#include <stat/libFN.h> 
    1819 
     
    2223 
    2324using namespace itpp; 
    24 //!Extended Kalman filter with unknown \c Q 
    25 class EKF_unQ : public EKFCh , public BMcond { 
    26 public: 
    27         //! Default constructor 
    28         EKF_unQ ( RV rx, RV ry,RV ru,RV rQ ) :EKFCh ( rx,ry,ru ),BMcond ( rQ ) {}; 
    29         void condition ( const vec &Q0 ) { 
    30                 Q.setD ( Q0,0 ); 
    31                 //from EKF 
    32                 preA.set_submatrix ( dimy+dimx,dimy,Q._Ch() ); 
    33         }; 
    34 }; 
    35  
    3625 
    3726int main() { 
     
    5948 
    6049        RV rQ ( "{Q }","4" ); 
    61         EKF_unQ KFEp ( rx,ry,ru,rQ ); 
     50        EKFCh_unQ KFEp ( rx,ry,ru,rQ ); 
    6251        KFEp.set_parameters ( &fxu,&hxu,Q,R ); 
    6352        KFEp.set_est ( mu0, chmat ( zeros ( 4 ) ) ); 
     
    6554        //mgamma_fix evolQ ( rQ,rQ ); 
    6655        migamma_fix evolQ ( rQ,rQ ); 
    67         MPF<EKF_unQ> M ( rx,rQ,evolQ,evolQ,Npart,KFEp ); 
     56        MPF<EKFCh_unQ> M ( rx,rQ,evolQ,evolQ,Npart,KFEp ); 
    6857        // initialize 
    6958        evolQ.set_parameters ( 0.1, Qdiag, 1.0); //sigma = 1/10 mu 
     
    8574        mat Dt=zeros ( Ndat,2+2 ); //observation 
    8675        mat XtE=zeros ( Ndat, 4 ); 
     76        mat VarE=zeros ( Ndat, 4 ); 
    8777        mat Qtr=zeros ( Ndat, 4 ); 
    8878        mat XtM=zeros ( Ndat,4+4 ); //Q + x 
     79        mat VarM=zeros ( Ndat,4+4 ); //Q + x 
    8980 
    9081        // SET SIMULATOR 
     
    129120                Qtr.set_row ( tK, Qdiag); 
    130121                XtE.set_row ( tK,KFEep.mean() ); 
     122                VarE.set_row ( tK,KFEep.variance() ); 
    131123                XtM.set_row ( tK,Mep.mean() ); 
     124                VarM.set_row ( tK,Mep.variance() ); 
    132125        } 
    133126 
     
    139132        fou << Name ( "xthE" ) << XtE; 
    140133        fou << Name ( "xthM" ) << XtM; 
     134        fou << Name ( "VarE" ) << VarE; 
     135        fou << Name ( "VarM" ) << VarM; 
    141136        //Exit program: 
    142137