Исследование Законов распределения. Статистики Колиогорова, страница 14

typedef struct AStat     // Структура для сохранения статистик

{

double Stat;           // Значение статистики

}

TAStat;

typedef TAStat* PAStat;  // Указатель на структуру для сохранения статистики

//--------------------------------------------------------------------------//--- Функция int __fastcall compare(void * Item1, void * Item2)

//--- Функция сравнения, используеая при сортировке выборки.

//--- Возвращает:

//--- "-1" если Item1 меньше чем Item2

//--- "1"  если Item1 больше чем Item2

//--- "0"  если Item1 равно Item2

int __fastcall compare(void * Item1, void * Item2)

{

int R=0;                                // Возвращаеый результат := 0

PAList Struc1,Struc2;                   // Структуры для сравнивания

Struc1 = (PAList) Item1;                // В Struc1 поещаем Item1

Struc2 = (PAList) Item2;                // В Struc2 поещаем Item2

if(Struc1->Random<Struc2->Random) R=-1; //  Первый меньше второго R:=-1

if(Struc1->Random>Struc2->Random) R=1;  //  Первый больше второго R:=1

return(R);                              //  Возвращае результат

};

//--- конец функции int __fastcall compare(void * Item1, void * Item2)------//--- Функция double genrand()

//--- Функция получает случайное число, принадлежащее равномерному

//--- распределению на отрезке (0,1) от выбранного генератора псевдослучайных

//--- чисел.

double genrand()

{

if(Form1->ComboBox1->ItemIndex==0)  //  Если выбран Mersenne Twister

{

return(genrand_real2());         //  генерируем с его помощью

};

if(Form1->ComboBox1->ItemIndex==1)  //  Если выбран ТТ800

{

return(TT800());                 //  генерируем с его помощью

};

};

//---конец функции double genrand()-----------------------------------------//--- Функция int Bi(int n, double p)

//--- Генерирует случайное число, принадлежащее биномиальному распределению

int Bi(int n, double p)

{

int R=0;                    // Возвращаемый результат

for(int i=0;i<n;i++)        // Генерируем число

{

if(genrand()<p) R++;

};

return(R);                  // Возвращаем число

};

//----конец функции int Bi(int n, double p)---------------------------------//---Функция double BiF(double n, double m, double p)

//---Считает теоретическую функцию биномиального распределения для заданного

//---случайного числа и параметров распределения

//--- m - число

//--- n и p - параетры распределения

double BiF(double n, double m, double p)

{

assert((n > 0) && (p >= 0) && (p <= 1));  // Проверяе, что n>0 и [0,1]эp

if (m < 0)                                // Если число <0

return 0;                              //               вернуть 0

else if (m == 0)                          // Если число =0

return pow(1-p, n);                    //               вернуть (1-p)^n

else if (m >= n)                          // Если число >n

return 1;                              //               вернуть 1

else                                      // Иначе, считаем значение функции

return BetaDF(n-m, m+1).value(1-p);    // распределения используя ее связь

// с функцией бета распределения

}

//---конец функции double BiF(double n, double m, double p)

//---Функция  int G(double p)

//--- Генерирует случайное число, принадлежащее геометрическому распределению

int G(double p)

{

int R=0;

R = ceill(log(genrand())/log(1-p)); // Генерируем число принадлежащее

return(R);                          // геометрическому распеделению из

// равномерного

};

//---конец функции int G(double p)

//---Функция double GF(double p,double rnd)

//---Считает теоретическую функцию геометрического распределения для заданного

//---случайного числа и параметров распределения

double GF(double p,double rnd)

{

return(1-pow(1-p,rnd));     // Считаем по формуле 1-(1-р)^Rav

};

//---конец функции double GF(double p,double rnd)

//---Функция int P(double lambda)

//--- Генерирует случайное число, принадлежащее распределению Пуассона