piecewise_constant_distribution Случайное распределение числа производит случайные числаx, b0≤x<bnравномерно распределяется по каждому подинтервалу в[bi,bi+1) соответствии с функцией плотности вероятности
p(x|b0,…,bn,ρ0,…,ρn−1)=ρi, for bi≤x<bi+1.
Параметрыn+1 распределенияbi, также известные как это распределение , должны удовлетворять соотношению для . Если не указано иное, остальные параметры распределения рассчитываются как: interval boundariesbi<bi+1i=0,…,n−1n
ρk=wkS⋅(bk+1−bk) for k=0,…,n−1,
в котором значенияwk, обычно известные как the , должны быть неотрицательными, отличными от NaN и бесконечными. Кроме того, соотношение должно занимать: .weights0<S=w0+⋯+wn−1
template<class RealType = double> class piecewise_constant_distribution { public: // types using result_type = RealType; using param_type = unspecified; // constructor and reset functions piecewise_constant_distribution(); template<class InputIteratorB, class InputIteratorW> piecewise_constant_distribution(InputIteratorB firstB, InputIteratorB lastB, InputIteratorW firstW); template<class UnaryOperation> piecewise_constant_distribution(initializer_list<RealType> bl, UnaryOperation fw); template<class UnaryOperation> piecewise_constant_distribution(size_t nw, RealType xmin, RealType xmax, UnaryOperation fw); explicit piecewise_constant_distribution(const param_type& parm); void reset(); // generating functions template<class URBG> result_type operator()(URBG& g); template<class URBG> result_type operator()(URBG& g, const param_type& parm); // property functions vector<result_type> intervals() const; vector<result_type> densities() const; param_type param() const; void param(const param_type& parm); result_type min() const; result_type max() const; };
piecewise_constant_distribution();
template<class InputIteratorB, class InputIteratorW>
piecewise_constant_distribution(InputIteratorB firstB, InputIteratorB lastB,
InputIteratorW firstW);
Requires: InputIteratorB иInputIteratorW каждый должен удовлетворять требованиям своегоinput iterator типа. Кроме того, каждыйiterator_traits<InputIteratorB>::value_type и iterator_traits<InputIteratorW>::value_typeдолжен обозначать тип, в который можно преобразоватьdouble. ЕслиfirstB == lastB или++firstB == lastB, пустьn=1, w0=1, b0=0иb1=1. В противном случае [firstB,lastB) должен формировать последовательностьb длиныn+1, длина последовательности,w начиная с,firstW должна быть не менееn, и любое значениеwk fork≥n должно игнорироваться распределением.
template<class UnaryOperation>
piecewise_constant_distribution(initializer_list<RealType> bl, UnaryOperation fw);
Requires: Каждый экземпляр типаUnaryOperation должен бытьfunction object типом возвращаемого значения, в который можно преобразоватьdouble. Более того, double должен быть преобразован в типUnaryOperationединственного параметра.
Effects: Создаетpiecewise_constant_distribution объект с параметрами , принятых или вычисленных из следующих значений: Еслиbl.size()<2, пустьn=1, w0=1, b0=0иb1=1. В противном случае позвольте[bl.begin(),bl.end()) сформировать последовательностьb0,…,bnи позвольтеwk=fw((bk+1+bk)/2) дляk=0,…,n−1.
template<class UnaryOperation>
piecewise_constant_distribution(size_t nw, RealType xmin, RealType xmax, UnaryOperation fw);
Requires: Каждый экземпляр типаUnaryOperation должен бытьfunction object типом возвращаемого значения, в который можно преобразоватьdouble. Более того, double должен быть преобразован в типUnaryOperationединственного параметра. Еслиnw=0, пустьn=1, иначе пустьn=nw. Отношение0<δ=(xmax−xmin)/n должно сохраняться.
Effects: Создаетpiecewise_constant_distribution объект с параметрами, взятыми или вычисленными из следующих значений: Letbk=xmin+k⋅δ fork=0,…,nиwk=fw(bk+δ/2) fork=0,…,n−1.
vector<result_type> intervals() const;
Returns: Объектvector<result_type> ,size член которого возвращаетсяn+1 иoperator[] член которого возвращаетсяbk при вызове с аргументомk fork=0,…,n.
vector<result_type> densities() const;