📄 newran.h
字号:
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 constructorspublic: 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 + -