Changeset 461 for library/bdm/stat/exp_family.h
- Timestamp:
- 07/31/09 13:06:49 (15 years ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
library/bdm/stat/exp_family.h
r450 r461 15 15 16 16 17 #include "../shared_ptr.h" 17 18 #include "../base/bdmbase.h" 18 19 #include "../math/chmat.h" … … 530 531 protected: 531 532 //! Internal epdf that arise by conditioning on \c rvc 532 enorm<sq_T>epdf;533 shared_ptr<enorm<sq_T> > iepdf; 533 534 mat A; 534 535 vec mu_const; … … 537 538 //! \name Constructors 538 539 //!@{ 539 mlnorm ( ) :mEF (),epdf ( ),A ( ),_mu ( epdf._mu() ) {ep =&epdf; }; 540 mlnorm ( const mat &A, const vec &mu0, const sq_T &R ) :epdf ( ),_mu ( epdf._mu() ) 541 { 542 ep =&epdf; set_parameters ( A,mu0,R ); 543 }; 540 mlnorm():iepdf(new enorm<sq_T>()), _mu(iepdf->_mu()) { set_ep(iepdf); }; 541 mlnorm (const mat &A, const vec &mu0, const sq_T &R ) :iepdf(new enorm<sq_T>()), _mu(iepdf->_mu()) 542 { 543 set_ep(iepdf); set_parameters ( A,mu0,R ); 544 } 545 544 546 //! Set \c A and \c R 545 547 void set_parameters ( const mat &A, const vec &mu0, const sq_T &R ); … … 553 555 mat& _A() {return A;} 554 556 //!access function 555 mat _R() { return epdf._R().to_mat();}557 mat _R() { return iepdf->_R().to_mat(); } 556 558 557 559 template<class sq_M> … … 577 579 protected: 578 580 //! Internal epdf that arise by conditioning on \c rvc 579 enorm<sq_T>epdf;581 shared_ptr<enorm<sq_T> > iepdf; 580 582 vec μ 581 583 fnc* g; 582 584 public: 583 585 //!default constructor 584 mgnorm() :mu ( epdf._mu() ) {ep=&epdf;}586 mgnorm():iepdf(new enorm<sq_T>()), mu(iepdf->_mu()) { set_ep(iepdf); } 585 587 //!set mean function 586 void set_parameters ( fnc* g0, const sq_T &R0 ) {g=g0; epdf.set_parameters ( zeros ( g->dimension() ), R0 );}588 void set_parameters ( fnc* g0, const sq_T &R0 ) {g=g0; iepdf->set_parameters ( zeros ( g->dimension() ), R0 );} 587 589 void condition ( const vec &cond ) {mu=g->eval ( cond );}; 588 590 … … 662 664 public: 663 665 mlstudent ( ) :mlnorm<ldmat> (), 664 Lambda (), _R ( epdf._R() ) {}666 Lambda (), _R ( iepdf->_R() ) {} 665 667 void set_parameters ( const mat &A0, const vec &mu0, const ldmat &R0, const ldmat& Lambda0 ) 666 668 { … … 668 670 it_assert_debug ( R0.rows() ==A0.rows(),"" ); 669 671 670 epdf.set_parameters ( mu0,Lambda ); //672 iepdf->set_parameters ( mu0,Lambda ); // 671 673 A = A0; 672 674 mu_const = mu0; … … 705 707 protected: 706 708 //! Internal epdf that arise by conditioning on \c rvc 707 egamma epdf; 709 shared_ptr<egamma> iepdf; 710 708 711 //! Constant \f$k\f$ 709 712 double k; 710 //! cache of epdf.beta 713 714 //! cache of iepdf.beta 711 715 vec &_beta; 712 716 713 717 public: 714 718 //! Constructor 715 mgamma ( ) : mEF ( ), epdf (), _beta ( epdf._beta() ) {ep=&epdf;}; 719 mgamma():iepdf(new egamma()), k(0), 720 _beta(iepdf->_beta()) { 721 set_ep(iepdf); 722 } 723 716 724 //! Set value of \c k 717 void set_parameters ( double k, const vec &beta0 ); 725 void set_parameters(double k, const vec &beta0); 726 718 727 void condition ( const vec &val ) {_beta=k/val;}; 719 728 //! Load from structure with elements: … … 749 758 protected: 750 759 //! Internal epdf that arise by conditioning on \c rvc 751 eigamma epdf; 760 shared_ptr<eigamma> iepdf; 761 752 762 //! Constant \f$k\f$ 753 763 double k; 754 //! cache of epdf.alpha 764 765 //! cache of iepdf.alpha 755 766 vec &_alpha; 756 //! cache of epdf.beta 767 768 //! cache of iepdf.beta 757 769 vec &_beta; 758 770 … … 760 772 //! \name Constructors 761 773 //!@{ 762 migamma ( ) : mEF (), epdf ( ), _alpha ( epdf._alpha() ), _beta ( epdf._beta() ) {ep=&epdf;}; 763 migamma ( const migamma &m ) : mEF (), epdf ( m.epdf ), _alpha ( epdf._alpha() ), _beta ( epdf._beta() ) {ep=&epdf;}; 774 migamma():iepdf(new eigamma()), 775 k(0), 776 _alpha(iepdf->_alpha()), 777 _beta(iepdf->_beta()) { 778 set_ep(iepdf); 779 } 780 781 migamma(const migamma &m):iepdf(m.iepdf), 782 k(0), 783 _alpha(iepdf->_alpha()), 784 _beta(iepdf->_beta()) { 785 set_ep(iepdf); 786 } 764 787 //!@} 765 788 … … 768 791 { 769 792 k=k0; 770 epdf.set_parameters ( ( 1.0/ ( k*k ) +2.0 ) *ones ( len ) /*alpha*/, ones ( len ) /*beta*/ );793 iepdf->set_parameters ( ( 1.0/ ( k*k ) +2.0 ) *ones ( len ) /*alpha*/, ones ( len ) /*beta*/ ); 771 794 dimc = dimension(); 772 795 }; … … 907 930 { 908 931 protected: 909 elognorm eno; 932 shared_ptr<elognorm> eno; 933 910 934 //! parameter 1/2*sigma^2 911 935 double sig2; 936 912 937 //! access 913 938 vec μ 914 939 public: 915 940 //! Constructor 916 mlognorm ( ) : eno (), mu ( eno._mu() ) {ep=&eno;}; 941 mlognorm():eno(new elognorm()), 942 sig2(0), 943 mu(eno->_mu()) { 944 set_ep(eno); 945 } 946 917 947 //! Set value of \c k 918 948 void set_parameters ( int size, double k ) 919 949 { 920 950 sig2 = 0.5*log ( k*k+1 ); 921 eno .set_parameters ( zeros ( size ),2*sig2*eye ( size ) );951 eno->set_parameters ( zeros ( size ),2*sig2*eye ( size ) ); 922 952 923 953 dimc = size; … … 1053 1083 { 1054 1084 protected: 1055 eiWishartCheiW;1085 shared_ptr<eiWishartCh> eiW; 1056 1086 //!square root of \f$ \nu-p-1 \f$ - needed for computation of \f$ \Psi \f$ from conditions 1057 1087 double sqd; … … 1060 1090 double l; 1061 1091 int p; 1062 public: 1092 1093 public: 1094 rwiWishartCh():eiW(new eiWishartCh()), 1095 sqd(0), l(0), p(0) { 1096 set_ep(eiW); 1097 } 1098 1063 1099 void set_parameters ( int p0, double k, vec ref0, double l0 ) 1064 1100 { … … 1069 1105 refl=pow(ref0,1-l); 1070 1106 1071 eiW.set_parameters ( eye ( p ),delta ); 1072 ep=&eiW; 1073 dimc=eiW.dimension(); 1107 eiW->set_parameters ( eye ( p ),delta ); 1108 dimc=eiW->dimension(); 1074 1109 } 1075 1110 void condition ( const vec &c ) { … … 1081 1116 } 1082 1117 1083 eiW ._setY ( sqd*z );1118 eiW->_setY ( sqd*z ); 1084 1119 } 1085 1120 }; … … 1239 1274 it_assert_debug ( A0.rows() ==R0.rows(),"" ); 1240 1275 1241 epdf.set_parameters ( zeros ( A0.rows() ),R0);1276 iepdf->set_parameters(zeros(A0.rows()), R0); 1242 1277 A = A0; 1243 1278 mu_const = mu0; 1244 dimc =A0.cols();1279 dimc = A0.cols(); 1245 1280 } 1246 1281 … … 1332 1367 os << "A:"<< ml.A<<endl; 1333 1368 os << "mu:"<< ml.mu_const<<endl; 1334 os << "R:" << ml. epdf._R().to_mat() <<endl;1369 os << "R:" << ml.iepdf->_R().to_mat() <<endl; 1335 1370 return os; 1336 1371 };