Changeset 878 for library/bdm/stat

Show
Ignore:
Timestamp:
03/24/10 14:30:43 (14 years ago)
Author:
sarka
Message:

dim ze set_parameters do validate

Location:
library/bdm/stat
Files:
4 modified

Legend:

Unmodified
Added
Removed
  • library/bdm/stat/emix.cpp

    r798 r878  
    126126void egiwmix::set_parameters ( const vec &w0, const Array<egiw*> &Coms0, bool copy ) { 
    127127        w = w0 / sum ( w0 ); 
    128         dim = Coms0 ( 0 )->dimension(); 
    129128        int i; 
    130129        for ( i = 0; i < w.length(); i++ ) { 
     
    142141                destroyComs = false; 
    143142        } 
     143} 
     144 
     145void    egiwmix::validate (){ 
     146   dim = Coms ( 0 )->dimension(); 
    144147} 
    145148 
  • library/bdm/stat/emix.h

    r775 r878  
    207207        //!By default Coms are copied inside. Parameter \c copy can be set to false if Coms live externally. Use method ownComs() if Coms should be destroyed by the destructor. 
    208208        void set_parameters ( const vec &w, const Array<egiw*> &Coms, bool copy = false ); 
    209  
     209         
    210210        //!return expected value 
     211        void validate(); 
     212         
    211213        vec mean() const; 
    212214 
     
    341343                epdfs = epdfs0;//.set_length ( epdfs0.length() ); 
    342344                dls.set_length ( epdfs.length() ); 
    343  
    344345                bool independent = true; 
    345346                if ( named ) { 
     
    349350                        } 
    350351                        dim = rv._dsize(); 
     352                         
    351353                } else { 
    352354                        dim = 0; 
     
    369371                        } 
    370372                } 
    371         } 
    372  
     373         
     374        } 
     375 
     376         
    373377        vec mean() const; 
    374378 
     
    405409public: 
    406410        //!Default constructor 
    407         mmix() : Coms ( 0 ) { } 
    408  
     411        mmix() : Coms ( 0 ) { }; 
     412 
     413 
     414 
     415 
     416 
     417         
    409418        double evallogcond ( const vec &dt, const vec &cond ) { 
    410419                double ll = 0.0; 
  • library/bdm/stat/exp_family.cpp

    r850 r878  
    2121        dimx = dimx0; 
    2222        nPsi = V0.rows() - dimx; 
    23         dim = dimx * ( dimx + nPsi ); // size(R) + size(Theta) 
    2423 
    2524        V = V0; 
     
    5352        eWishartCh Omega; //inverse Wishart, result is R, 
    5453        Omega.set_parameters ( iChLam, nu - 2*nPsi - dimx ); // 2*nPsi is there to match numercial simulations - check if analytically correct 
     54        Omega.validate();        
    5555 
    5656        mat OmChi; 
     
    8787        eWishartCh Omega; //inverse Wishart, result is R, 
    8888        Omega.set_parameters ( iCh, nu - 2*nPsi - dimx ); // 2*nPsi is there to match numercial simulations - check if analytically correct 
     89        Omega.validate(); 
    8990 
    9091        chmat Omi; 
     
    420421        k = k0; 
    421422        iepdf.set_parameters ( k * ones ( beta0.length() ), beta0 ); 
    422         dimc = iepdf.dimension(); 
    423         dim = iepdf.dimension(); 
    424423} 
    425424 
     
    532531        UI::get ( ref, set, "ref" , UI::compulsory ); 
    533532        set_parameters ( set["k"], ref, set["l"] ); 
     533        validate(); 
    534534} 
    535535 
     
    538538        UI::get ( mu0, set, "mu0", UI::compulsory ); 
    539539        set_parameters ( mu0.length(), set["k"] ); 
     540        validate(); 
    540541        condition ( mu0 ); 
    541542} 
  • library/bdm/stat/exp_family.h

    r870 r878  
    369369        egiw ( int dimx0, ldmat V0, double nu0 = -1.0 ) : eEF() { 
    370370                set_parameters ( dimx0, V0, nu0 ); 
     371                validate(); 
    371372        }; 
    372373 
     
    465466                        UI::get ( dV, set, "dV", UI::compulsory ); 
    466467                        set_parameters ( dimx, ldmat ( dV ), nu ); 
     468                        validate(); 
    467469 
    468470                } else { 
    469471                        set_parameters ( dimx, V, nu ); 
     472                        validate(); 
    470473                } 
    471474        } 
     
    479482 
    480483        void validate() { 
    481                 // check sizes, rvs etc. 
     484        dim = dimx * ( dimx + nPsi );    
     485         
     486            // check sizes, rvs etc. 
    482487                // also check if RV are meaningful!!! 
    483488                // meaningful =  rv for theta  and rv for r are split! 
     
    510515        eDirich ( const eDirich &D0 ) : eEF () { 
    511516                set_parameters ( D0.beta ); 
     517                validate(); 
    512518        }; 
    513519        eDirich ( const vec &beta0 ) { 
    514520                set_parameters ( beta0 ); 
     521                validate(); 
    515522        }; 
    516523        void set_parameters ( const vec &beta0 ) { 
     
    718725        egamma ( const vec &a, const vec &b ) { 
    719726                set_parameters ( a, b ); 
     727                validate(); 
    720728        }; 
    721729        void set_parameters ( const vec &a, const vec &b ) { 
    722730                alpha = a, beta = b; 
    723                 dim = alpha.length(); 
    724731        }; 
    725732        //!@} 
     
    845852                nk = prod ( 1.0 / distance ); 
    846853                lnk = log ( nk ); 
    847                 dim = low.length(); 
    848854        } 
    849855        //!@} 
     
    909915                UI::get ( delta, set, "delta", UI::compulsory ); 
    910916                mean = UI::build<fnc> ( set, "mean", UI::compulsory ); 
    911  
    912917                iepdf.set_parameters ( -delta, delta ); 
     918        } 
     919         
     920        void validate(){ 
    913921                dimc = mean->dimensionc(); 
    914                 validate(); 
    915         } 
     922                iepdf.validate(); 
     923        } 
     924 
    916925}; 
    917926UIREGISTER ( mguni ); 
     
    935944        mlnorm ( const mat &A, const vec &mu0, const sq_T &R ) : pdf_internal< TEpdf<sq_T> >() { 
    936945                set_parameters ( A, mu0, R ); 
     946                validate(); 
    937947        } 
    938948 
     
    942952                A = A0; 
    943953                mu_const = mu0; 
    944                 this->dimc = A0.cols(); 
    945         } 
     954        } 
     955 
    946956        //!@} 
    947957        //! Set value of \c rvc . Result of this operation is stored in \c epdf use function \c _ep to access it. 
     
    10021012                bdm_assert ( A.rows() == mu_const.length(), "mlnorm: A vs. mu mismatch" ); 
    10031013                bdm_assert ( A.rows() == _R().rows(), "mlnorm: A vs. R mismatch" ); 
     1014                this->dimc = A.cols(); 
    10041015 
    10051016        } 
     
    10611072        void validate() { 
    10621073                bdm_assert ( g->dimension() == this->dimension(), "incompatible function" ); 
     1074                this->dim = g->dimension(); 
     1075                this->dimc = g->dimensionc(); 
     1076                this->iepdf.validate(); 
    10631077        } 
    10641078}; 
     
    12021216        void set_parameters ( int len, double k0 ) { 
    12031217                k = k0; 
    1204                 iepdf.set_parameters ( ( 1.0 / ( k*k ) + 2.0 ) *ones ( len ) /*alpha*/, ones ( len ) /*beta*/ ); 
     1218                iepdf.set_parameters ( ( 1.0 / ( k*k ) + 2.0 ) *ones ( len ) /*alpha*/, ones ( len ) /*beta*/ );                 
     1219        }; 
     1220 
     1221        void    validate (){ 
     1222                iepdf.validate(); 
    12051223                dimc = dimension(); 
    1206         }; 
     1224}; 
     1225 
    12071226        void condition ( const vec &val ) { 
    12081227                _beta = elem_mult ( val, ( _alpha - 1.0 ) ); 
     
    12351254                mgamma::set_parameters ( k0, ref0 ); 
    12361255                refl = pow ( ref0, 1.0 - l0 ); 
    1237                 l = l0; 
     1256                l = l0;  
     1257        }; 
     1258 
     1259        void    validate (){ 
     1260                mgamma::validate(); 
    12381261                dimc = dimension(); 
    12391262        }; 
     
    12731296                refl = pow ( ref0, 1.0 - l0 ); 
    12741297                l = l0; 
     1298        }; 
     1299 
     1300        void validate(){ 
     1301                migamma::validate(); 
    12751302                dimc = dimension(); 
    12761303        }; 
    1277  
     1304         
    12781305        void condition ( const vec &val ) { 
    12791306                vec mean = elem_mult ( refl, pow ( val, l ) ); 
     
    13491376                sig2 = 0.5 * log ( k * k + 1 ); 
    13501377                iepdf.set_parameters ( zeros ( size ), 2*sig2*eye ( size ) ); 
    1351  
    1352                 dimc = size; 
    1353         }; 
     1378        }; 
     1379         
     1380        void validate(){ 
     1381                iepdf.validate(); 
     1382                dimc = iepdf.dimension(); 
     1383        } 
    13541384 
    13551385        void condition ( const vec &val ) { 
     
    13931423                Y = chmat ( Y0 ); 
    13941424                delta = delta0; 
    1395                 p = Y.rows(); 
    1396                 dim = p * p; 
     1425                p = Y.rows();    
    13971426        } 
    13981427        //! Set internal structures 
     
    14011430                delta = delta0; 
    14021431                p = Y.rows(); 
     1432                } 
     1433         
     1434        virtual void validate (){ 
    14031435                dim = p * p; 
    14041436        } 
     1437 
    14051438        //! Sample matrix argument 
    14061439        mat sample_mat() const { 
     
    14701503         
    14711504        virtual void    validate (){ 
    1472       dim = W.dimension(); 
     1505                W.validate(); 
     1506                dim = W.dimension(); 
    14731507        } 
    14741508         
     
    15401574                l = l0; 
    15411575                refl = pow ( ref0, 1 - l ); 
    1542  
    15431576                iepdf.set_parameters ( eye ( p ), delta ); 
     1577        }; 
     1578         
     1579        void validate(){ 
     1580                iepdf.validate(); 
    15441581                dimc = iepdf.dimension(); 
    15451582        } 
     1583         
    15461584        void condition ( const vec &c ) { 
    15471585                vec z = c; 
     
    18411879void mgnorm<sq_T >::set_parameters ( const shared_ptr<fnc> &g0, const sq_T &R0 ) { 
    18421880        g = g0; 
    1843         this->dim = g->dimension(); 
    1844         this->dimc = g->dimensionc(); 
    18451881        this->iepdf.set_parameters ( zeros ( g->dimension() ), R0 ); 
    18461882}