📄 newran.h
字号:
ExtReal Mean() const { return mean; }
ExtReal Variance() const { return var; }
};
//***************** Poisson random number generator *******************
class Poisson : public Random // generate poisson rv
{
void operator=(const Poisson&) {} // private so can't access
Random* method;
public:
char* Name(); // identification
Poisson(Real); // constructor (Real=mean)
~Poisson() { delete method; }
Real Next() { return method->Next(); }
ExtReal Mean() const { return method->Mean(); }
ExtReal Variance() const { return method->Variance(); }
};
//***************** binomial random number generator *******************
class Binomial : public Random // generate binomial rv
{
void operator=(const Binomial&) {} // private so can't access
Random* method;
public:
char* Name(); // identification
Binomial(int p, Real n); // constructor (int=n, Real=p)
~Binomial() { delete method; }
Real Next() { return method->Next(); }
ExtReal Mean() const { return method->Mean(); }
ExtReal Variance() const { return method->Variance(); }
};
//************** negative binomial random number generator *****************
class NegativeBinomial : public AsymGen // generate negative binomial rv
{
Real N, P, Q, p, ln_q, c;
public:
char* Name();
NegativeBinomial(Real NX, Real PX); // constructor
Real Density(Real) const; // Negative binomial density function
Real Next();
ExtReal Mean() const { return N * P; }
ExtReal Variance() const { return N * P * Q; }
};
//************************ sum of random numbers ************************
class NegatedRandom : public Random
{
protected:
Random* rv;
NegatedRandom(Random& rvx) : rv(&rvx) {}
void tDelete() { rv->tDelete(); delete this; }
public:
Real Next();
ExtReal Mean() const;
ExtReal Variance() const;
friend NegatedRandom& operator-(Random&);
};
class ScaledRandom : public Random
{
protected:
Random* rv; Real s;
ScaledRandom(Random& rvx, Real sx) : rv(&rvx), s(sx) {}
void tDelete() { rv->tDelete(); delete this; }
public:
Real Next();
ExtReal Mean() const;
ExtReal Variance() const;
friend ScaledRandom& operator*(Real, Random&);
friend ScaledRandom& operator*(Random&, Real);
friend ScaledRandom& operator/(Random&, Real);
};
class ReciprocalRandom : public Random
{
protected:
Random* rv; Real s;
ReciprocalRandom(Random& rvx, Real sx) : rv(&rvx), s(sx) {}
void tDelete() { rv->tDelete(); delete this; }
public:
Real Next();
ExtReal Mean() const { return Missing; }
ExtReal Variance() const { return Missing; }
friend ReciprocalRandom& operator/(Real, Random&);
};
class ShiftedRandom : public ScaledRandom
{
ShiftedRandom(Random& rvx, Real sx) : ScaledRandom(rvx, sx) {}
public:
Real Next();
ExtReal Mean() const;
ExtReal Variance() const;
friend ShiftedRandom& operator+(Real, Random&);
friend ShiftedRandom& operator+(Random&, Real);
friend ShiftedRandom& operator-(Random&, Real);
};
class ReverseShiftedRandom : public ScaledRandom
{
ReverseShiftedRandom(Random& rvx, Real sx) : ScaledRandom(rvx, sx) {}
public:
Real Next();
ExtReal Mean() const;
ExtReal Variance() const;
friend ReverseShiftedRandom& operator-(Real, Random&);
};
class RepeatedRandom : public Random
{
Random* rv; int n;
void tDelete() { rv->tDelete(); delete this; }
RepeatedRandom(Random& rvx, int nx) : rv(&rvx), n(nx) {}
public:
Real Next();
ExtReal Mean() const;
ExtReal Variance() const;
friend class Random;
};
class MultipliedRandom : public Random
{
protected:
Random* rv1; Random* rv2;
void tDelete() { rv1->tDelete(); rv2->tDelete(); delete this; }
MultipliedRandom(Random& rv1x, Random& rv2x) : rv1(&rv1x), rv2(&rv2x) {}
public:
Real Next();
ExtReal Mean() const;
ExtReal Variance() const;
friend MultipliedRandom& operator*(Random&, Random&);
};
class AddedRandom : public MultipliedRandom
{
AddedRandom(Random& rv1x, Random& rv2x) : MultipliedRandom(rv1x, rv2x) {}
public:
Real Next();
ExtReal Mean() const;
ExtReal Variance() const;
friend AddedRandom& operator+(Random&, Random&);
};
class SubtractedRandom : public MultipliedRandom
{
SubtractedRandom(Random& rv1x, Random& rv2x)
: MultipliedRandom(rv1x, rv2x) {}
public:
Real Next();
ExtReal Mean() const;
ExtReal Variance() const;
friend SubtractedRandom& operator-(Random&, Random&);
};
class DividedRandom : public MultipliedRandom
{
DividedRandom(Random& rv1x, Random& rv2x)
: MultipliedRandom(rv1x, rv2x) {}
public:
Real Next();
ExtReal Mean() const { return Missing; }
ExtReal Variance() const { return Missing; }
friend DividedRandom& operator/(Random&, Random&);
};
class SumRandom : public Random // sum of random variables
{
void operator=(const SumRandom&) {} // private so can't access
Random* rv;
public:
char* Name(); // identification
SumRandom(NegatedRandom& rvx) : rv(&rvx) {}
SumRandom(AddedRandom& rvx) : rv(&rvx) {}
SumRandom(MultipliedRandom& rvx) : rv(&rvx) {}
SumRandom(SubtractedRandom& rvx) : rv(&rvx) {}
SumRandom(DividedRandom& rvx) : rv(&rvx) {}
SumRandom(ShiftedRandom& rvx) : rv(&rvx) {}
SumRandom(ReverseShiftedRandom& rvx) : rv(&rvx) {}
SumRandom(ScaledRandom& rvx) : rv(&rvx) {}
SumRandom(ReciprocalRandom& rvx) : rv(&rvx) {}
SumRandom(RepeatedRandom& rvx) : rv(&rvx) {}
Real Next() { return rv->Next(); }
ExtReal Mean() const { return rv->Mean(); }
ExtReal Variance() const { return rv->Variance(); }
~SumRandom() { rv->tDelete(); }
};
//******************** mixtures of random numbers ************************
class SelectedRandom : public Random
{
friend class Random;
Random* rv; Real p;
SelectedRandom(Random& rvx, Real px) : rv(&rvx), p(px) {}
void tDelete() { rv->tDelete(); delete this; }
public:
void load(int*, Real*, Random**);
Real Next();
};
class AddedSelectedRandom : public Random
{
friend class Random;
protected:
Random* rv1; Random* rv2;
AddedSelectedRandom(Random& rv1x, Random& rv2x)
: rv1(&rv1x), rv2(&rv2x) {}
void tDelete() { rv1->tDelete(); rv2->tDelete(); delete this; }
public:
int nelems() const;
void load(int*, Real*, Random**);
Real Next();
friend AddedSelectedRandom& operator+(SelectedRandom&,
SelectedRandom&);
friend AddedSelectedRandom& operator+(AddedSelectedRandom&,
SelectedRandom&);
friend AddedSelectedRandom& operator+(SelectedRandom&,
AddedSelectedRandom&);
friend AddedSelectedRandom& operator+(AddedSelectedRandom&,
AddedSelectedRandom&);
};
class MixedRandom : public Random // mixtures of random numbers
{
void operator=(const MixedRandom&) {} // private so can't access
int n; // number of components
DiscreteGen* dg; // discrete mixing distribution
Random** rv; // array of pointers to rvs
ExtReal mean, var;
void Build(Real*); // used by constructors
public:
char* Name(); // identification
MixedRandom(int, Real*, Random**);
MixedRandom(AddedSelectedRandom&);
~MixedRandom();
Real Next();
ExtReal Mean() const { return mean; }
ExtReal Variance() const { return var; }
};
//******************* Permutation generator *******************************
class RandomPermutation // generate permutation of integers
{
Random U;
public:
void Next(int N, int M, int p[], int start = 0);
// select permutation of M numbers
// from start, ..., start+N-1
// results to p
void Next(int N, int p[], int start = 0) { Next(N, N, p, start); }
};
class RandomCombination : public RandomPermutation
// generate combination of integers
// sorted - ascending
{
void SortAscending(int n, int gm[]);
public:
void Next(int N, int M, int p[], int start = 0)
{ RandomPermutation::Next(N, M, p, start); SortAscending(M, p); }
void Next(int N, int p[], int start = 0) { Next(N, N, p, start); }
};
#ifdef use_namespace
}
#endif
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -