2011-12-12 6 views
1

나는 boost_1_46_1에 대한 포아송 분포에서 임의의 숫자를 생성하기 위해 boost variate_generator를 사용합니다 (버전간에 임의로 변경되는 variate_generator의 폴더 구조).포아송 분포 문제에 대한 boost_vener_generator

코드 스 니펫 다음에 오류 보고서가 표시됩니다. 분명히 variate_generator에 대한 호출을 인식하지 못하며 variate_generator.hpp:123: error: no type named result_type in class boost::math::poisson_distribution에 대해 불평합니다.

내가 잘못하고있는 것을 알아 내지 못했습니다. 도움을 받으실 수 있습니다! 감사.

코드

#include <boost/random/variate_generator.hpp> 
#include <boost/random/mersenne_twister.hpp> 
#include <boost/math/distributions/poisson.hpp> 
using namespace boost; 

double poiss(double mean) { 
static boost::mt19937 randgen(0); 
static boost::math::poisson_distribution <double> pd(mean); 
    static boost::variate_generator <boost::mt19937&, boost::math::poisson_distribution <double> > generator(randgen, pd); <- line CnvSeg.c:46 
return (double) generator(); 
} 

오류

CnvSeg.c:47: error: no match for call to â(boost::variate_generator<boost::mt19937&, boost::math::poisson_distribution<double, boost::math::policies::policy<boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy> > >)()â 
/home/craczy/boost_1_46_1/include/boost/random/variate_generator.hpp: In constructor âboost::variate_generator<Engine, Distribution>::variate_generator(Engine, Distribution) [with Engine = boost::mt19937&, Distribution = boost::math::poisson_distribution<double, boost::math::policies::policy<boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy> >]â: 
CnvSeg.c:46: instantiated from here 
/home/craczy/boost_1_46_1/include/boost/random/variate_generator.hpp:134: error: using invalid field âboost::variate_generator<Engine, Distribution>::_engâ 
/home/craczy/boost_1_46_1/include/boost/random/variate_generator.hpp:123: error: no type named âresult_typeâ in âclass boost::math::poisson_distribution<double, boost::math::policies::policy<boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy, boost::math::policies::default_policy> >â 

답변

1

당신은 잘못된 포아송 분포를 사용하고 있습니다. boost :: math 배포판은 Boost.Random과 호환되지 않으므로 다음과 같이 사용하십시오 :

#include <boost/random/poisson_distribution.hpp> 
boost::poisson_distribution<> pd(mean); 
boost::variate_generator <boost::mt19937, boost::poisson_distribution<> >