Changeset 12 for libEF.h

Show
Ignore:
Timestamp:
01/25/08 10:53:47 (16 years ago)
Author:
smidl
Message:

opravy v libDC (stale nefunkcni)

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • libEF.h

    r8 r12  
    1515 
    1616#include <itpp/itbase.h> 
     17#include "libDC.h" 
     18#include "libBM.h" 
    1719//#include <std> 
    1820 
     
    2426* More?... 
    2527*/ 
    26 class eEF :public epdf { 
     28class eEF : public epdf { 
    2729 
    2830public: 
    29         virtual void tupdate( double phi, mat &vbar, double nubar ){}; 
    30         virtual void dupdate( mat &v,double nu=1.0 ){}; 
     31        virtual void tupdate( double phi, mat &vbar, double nubar ) {}; 
     32        virtual void dupdate( mat &v,double nu=1.0 ) {}; 
    3133}; 
    3234 
    33 class mEF :public mpdf { 
     35class mEF : public mpdf { 
    3436 
    3537public: 
     
    4446template<class sq_T> 
    4547class enorm : public eEF { 
     48        int dim; 
    4649        vec mu; 
    4750        sq_T R; 
     
    5255        void dupdate( mat &v,double nu=1.0 ); 
    5356        vec sample(); 
     57        mat sample(int N); 
    5458        double eval( const vec &val ); 
    55  
     59        Normal_RNG RNG; 
    5660}; 
    5761 
     
    7680template<class sq_T> 
    7781enorm<sq_T>::enorm( RV &rv, vec &mu0, sq_T &R0 ) { 
     82        dim = rv.count(); 
    7883        mu = mu0; 
    7984        R = R0; 
     
    9297template<class sq_T> 
    9398vec enorm<sq_T>::sample() { 
    94         // 
     99        vec x( dim ); 
     100        RNG.sample_vector( dim,x ); 
     101        vec smp = R.sqrt_mult( x ); 
     102 
     103        smp += mu; 
     104        return smp; 
     105}; 
     106 
     107template<class sq_T> 
     108mat enorm<sq_T>::sample( int N ) { 
     109        mat X( dim,N ); 
     110        vec x( dim ); 
     111        vec pom; 
     112        int i; 
     113        for ( i=0;i<N;i++ ) { 
     114                RNG.sample_vector( dim,x ); 
     115                pom = R.sqrt_mult( x ); 
     116                pom +=mu; 
     117                X.set_col( i, pom); 
     118        } 
     119        return X; 
    95120}; 
    96121 
     
    106131template<class sq_T> 
    107132mlnorm<sq_T>::mlnorm( RV &rv,RV &rvc, mat &A, sq_T &R ) { 
    108         int dim = rv.length(); 
     133        int dim = rv.count(); 
    109134        vec mu( dim ); 
    110135 
     
    116141        this->condition( cond ); 
    117142        vec smp = epdf.sample(); 
    118         lik = epdf.eval(smp); 
     143        lik = epdf.eval( smp ); 
    119144        return smp; 
    120145} 
     
    123148mat mlnorm<sq_T>::samplecond( vec &cond, vec &lik, int n ) { 
    124149        int i; 
    125         int dim = rv.length(); 
     150        int dim = rv.count(); 
    126151        mat Smp( dim,n ); 
    127         vec smp( dim); 
     152        vec smp( dim ); 
    128153        this->condition( cond ); 
    129154        for ( i=0; i<dim; i++ ) { 
    130155                smp = epdf.sample(); 
    131                 lik(i) = epdf.eval(smp); 
    132                 Smp.set_col( i ,smp); 
     156                lik( i ) = epdf.eval( smp ); 
     157                Smp.set_col( i ,smp ); 
    133158        } 
    134159        return Smp; 
     
    136161 
    137162template<class sq_T> 
    138 void mlnorm<sq_T>::condition( vec &cond) { 
     163void mlnorm<sq_T>::condition( vec &cond ) { 
     164        epdf.mu = A*cond; 
     165//R is already assigned; 
    139166} 
    140167