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

head += ", " + ComboBox3->Items->Strings[1];                 // Статистика

ListBox1->Items->Add(head);              //  Добавляем заголовок в ListBox1

ListBox1->Items->Add("0 "+Edit4->Text);  //  Добавляем в ListBox1 строку "0 m"

for(int k=0;k<Edit4->Text.ToInt();k++)   // Цикл по количеству выборок

{

//-----Формирование массива случайных чисел

for(int i=0;i<Edit3->Text.ToInt();i++)   // Цикл по количеству элементов выборки

{

//-----Генерация случайной величины распределенной по выбранному закону

if(ComboBox2->ItemIndex==0)

{

//-----Геометрическое распределение

random = G(Edit1->Text.ToDouble());

};

if(ComboBox2->ItemIndex==1)

{

//-----Биномиальное распределение

random = Bi(Edit2->Text.ToInt(),Edit1->Text.ToDouble());

};

if(ComboBox2->ItemIndex==2)

{

//-----Распределение Пуассона

random = P(Edit1->Text.ToDouble());

};

//-----Добавление случайной величины в массив

int flag=0;                     // Флаг существования такой СВ в выборке

for(int i=0;i<seed->Count;i++)   // Ище такую СВ в выборке

{

AStruct = (PAList) seed->Items[i]; // перебирая ее элементы

if(AStruct->Random == random) { AStruct->Count++; flag=1; break; }; // нашли

};  //-----Если такое значение уже есть в массиве, то увеличить count

if(flag==0)  // Если не нашли

{

AStruct = new TAList;        //  - создаем новый элемент выборки

AStruct->Random = random;    //  СВ

AStruct->Count = 1;          // Кол-во :=1

if(ComboBox2->ItemIndex==0)  // Считаем Теоретич. Функцию распределения

{

//-----Геометрическое распределение

F = GF(Edit1->Text.ToDouble(),random);

};

if(ComboBox2->ItemIndex==1)

{

//-----Биномиальное распределение

F = BiF(Edit2->Text.ToInt(),random,Edit1->Text.ToDouble());

};

if(ComboBox2->ItemIndex==2)

{

//-----Распределение Пуассона

F = PF(Edit1->Text.ToDouble(),random);

};

AStruct->F = F;

seed->Add(AStruct);  // добавить элемент в выборку

};

};

seed->Sort(&compare);    // Сортировка выборки, когда все величины

// сгенерированы. Используем Функцию сравнеия

// compare (см. выше)

//-----Формирование массива статистик

//-----Статистика Колмогорова

statis=0;          //  Статистика :=0

double Fx=0,       //  Теор. функ. распред.

Fnx=0,      //  Эмп. функ. распред.

Max=-10,    //  Максимум Dn

Dn;         //  Текущкее Dn

int    ii=0;       //  Счетчик

for(int i=0;i<seed->Count;i++)   // Перебираем элеенты упорядоченной выборки

{

AStruct = (PAList) seed->Items[i]; // получаем элемент

Fx  =  AStruct->F;                // получаем теор. функ. распред.

Fnx += double(AStruct->Count)/Edit3->Text.ToDouble();

// считаем эмп. функ. распред.

Dn=fabs(Fnx-Fx);                  // считаем Dn

if(Dn>Max) Max=Dn;                // проверяем на максимум

};

statis=(6.*Edit3->Text.ToDouble()*Max+1.)/(6.*sqrt(Edit3->Text.ToDouble()));

// Считаем статистику

//------Добавляем статистику в массив

AStruct1 = new TAStat;

AStruct1->Stat = statis;

stat->Add(AStruct1);

//------Вывод времени

ftime(&f);

ft = double(f.time) + double(f.millitm)/1000;

tt = ft-st;

StatusBar1->Panels->BeginUpdate();

StatusBar1->Panels->Items[0]->Text = "Затрачено времени : "

+ FloatToStr(floor(tt*100)/100) + " с.";

StatusBar1->Panels->EndUpdate();

//------Чистим память от выборки

for(int i=0;i<seed->Count;i++)

{

AStruct = (PAList) seed->Items[i];

delete AStruct;   // Удаляем элементы выборки

};

seed->Clear();    // Удаляем указатели

};

//-----Вывод массива статистик

for(int i=0;i<stat->Count;i++)  // Идем по массиву

{

AStruct1 = (PAStat) stat->Items[i];               //  Получаем элемент

ListBox1->Items->Add(FloatToStr(AStruct1->Stat)); //  Выводим элемент

};

}

//--------------------------------------------------------------------------