Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ boost _ не генерирует Бета-распределение, ошибка в variate_generator

Автор: pe1e 7.3.2012, 21:46

Здравствуйте!

Я занимаюсь научной деятельностью,а конкретно моделированием стахостических процессов и проверкой статистических гипотез. Недавно столкнулся с библиотекой Boost, поэтому еще не совсем понимаю концепцию ее, хотя не скрываю,что не совсем понимаю открытые исходные файлы библиотеки. Проблема заключается в следующем: генератор случайных числе для Бета-распределения выдает ошибку на следующий код

#include<string.h>
#include<stdio.h>
#include<conio.h>
#include<math.h>

#include<stdlib.h>
#include<time.h>
#include<limits.h>
#include<boost/random.hpp>

#include<boost/random/mersenne_twister.hpp>
#include<boost/random/chi_squared_distribution.hpp>
#include<boost/random/fisher_f_distribution.hpp>
#include <boost/math/distributions/normal.hpp>

#include <boost/math/distributions/weibull.hpp>
#include <boost/math/distributions/beta.hpp>
#include <boost/math/policies/policy.hpp>
#include <boost/random/variate_generator.hpp>

#include <boost/random/mersenne_twister.hpp>

#include<ctime>
#include<algorithm>
#include<locale.h>
#include<vector>

using boost::math::beta_distribution;
beta_distribution<> beta_dist(param[0], param[1]);
variate_generator<mt19937&, beta_distribution<>>  beta_sampler(rng, beta_dist);
return beta_sampler();



следующие ошибки:

1> f:\nstu_university_labwork\8 semester\выпускная квалификационная бакалаврская работа\филоненко\criterionofhomogeneity\criterionofhomogeneity\sample.cpp(120): см. ссылку на создание экземпляров класса шаблон при компиляции "boost::random::variate_generator<Engine,Distribution>"
1> with
1> [
1> Engine=boost::random::mt19937 &,
1> Distribution=boost::math::beta_distribution<>
1> ]
1>d:\program files (x86)\microsoft visual studio 10.0\vc\include\boost\random\variate_generator.hpp(59): error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "result_type"
1>d:\program files (x86)\microsoft visual studio 10.0\vc\include\boost\random\variate_generator.hpp(59): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>d:\program files (x86)\microsoft visual studio 10.0\vc\include\boost\random\variate_generator.hpp(59): error C2602: boost::random::variate_generator<Engine,Distribution>::result_type не является членом базового класса "boost::random::variate_generator<Engine,Distribution>"
1> with
1> [
1> Engine=boost::random::mt19937 &,
1> Distribution=boost::math::beta_distribution<>
1> ]
1> d:\program files (x86)\microsoft visual studio 10.0\vc\include\boost\random\variate_generator.hpp(59): см. объявление "boost::random::variate_generator<Engine,Distribution>::result_type"
1> with
1> [
1> Engine=boost::random::mt19937 &,
1> Distribution=boost::math::beta_distribution<>
1> ]
1>d:\program files (x86)\microsoft visual studio 10.0\vc\include\boost\random\variate_generator.hpp(59): error C2868: boost::random::variate_generator<Engine,Distribution>::result_type: недопустимый синтаксис для "using"-объявления; требуется полное имя
1> with
1> [
1> Engine=boost::random::mt19937 &,
1> Distribution=boost::math::beta_distribution<>
1> ]


Помогите пожалуйста. К сожалению,весь код выложить не могу,потому находится в разных файлах (в .h и .cpp файлах,связанных вместе).
Заранее спасибо!

Автор: Iron Bug 8.3.2012, 13:08

скорее всего, тут общесишная опечатка:
в конструкциях типа template1_name<template2_name<> > важно соблюдать пробел между последними закрывающими угловыми скобками "> >" иначе компилятор рассматривает эту конструкцию, как оператор сдвига >>.
попробуй поставить пробелы в таких конструкциях (beta_distribution<>>) и посмотреть на результат.

P.S. и ещё: процессы стОхАстические, а не стахостические :)

Автор: BRE 8.3.2012, 13:47

Цитата(Iron Bug @ 8.3.2012, 14:08) *
скорее всего, тут общесишная опечатка:
в конструкциях типа template1_name<template2_name<> > важно соблюдать пробел между последними закрывающими угловыми скобками "> >" иначе компилятор рассматривает эту конструкцию, как оператор сдвига >>.

Вроде с C++11 эту ситуацию прояснили и разрешили писать слитно (новым компиляторам должно быть все равно).

Автор: Iron Bug 8.3.2012, 15:42

Цитата(BRE @ 8.3.2012, 16:47) *
новым компиляторам должно быть все равно.

ну, может совсем новым и всё равно. а ещё до недавнего времени было нет. так что лучше исключить сразу подобную ситуацию, она обычно порождает множество непонятных ошибок компилятора.

Автор: pe1e 8.3.2012, 16:08

спасибо за конструктивную критику относительно моего русского - исправлюсь! :)
а что касается двойных скобочек,то VS2010 абсолютно ровно на это. В итоге пришел к выводу,что Бетта-распределение не генерирует случайных чисел и нашел аппроксимацию через равномерное распределение.

спасибо большое всем кто поучаствовал в этой теме! :)

Автор: BRE 8.3.2012, 16:09

Цитата(Iron Bug @ 8.3.2012, 16:42) *
так что лучше исключить сразу подобную ситуацию, она обычно порождает множество непонятных ошибок компилятора.

Пока компиляторы не будут использовать режим C++11 по умолчанию нужно будет разделять. Я, скорее всего, и потом буду разделять ибо "привычка выработанная годами". :)

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)