Проверка гипотезы о нормальности закона распределения экспериментальных данных

Проверкагипотезы о нормальности закона распределения экспериментальных данных
 

1. Цель работы
 
Смоделировать работугенератора случайных двоичных чисел, имеющего закон распределения, заданного спомощью модели Гильберта; ограниченной последовательности 0 и 1.
 
2. Основнаячасть
 
В качестве входнойпоследовательности выбрали следующую:
2)1100101010111100001000010000001010101111000010010000100111100100
Моделирование случайнойпоследовательности проводилась средствами языка С++ (среда BorlandBuilder C++)
Текст программы
генератор двоичный число гильберт
//—————————————————————————
#include
#include
#include
#include
//—————————————————————————
#include
#pragmahdrstop
#include«systemsimulation.h»
//—————————————————————————
#pragmapackage(smart_init)
#pragmaresource “*.dfm”
TMainForm*MainForm;
//—————————————————————————
__fastcallTMainForm::TMainForm(TComponent* Owner)
: TForm(Owner)
{
}
//—————————————————————————
//Вывод в поле RichEditс заданием цвета выводимого текста
//REditAddColor(RichEdit1,«Test», clRed);
void__fastcall TMainForm::REditAddColor(TRichEdit *RichEditX, AnsiString Text,TColor Color)
{
//HideCaret(RichEditX->Handle);
RichEditX->SelAttributes->Color= Color; //задаём цветтекста
RichEditX->Lines->Add(Text);//выводимтекст
RichEditX->Perform(EM_LINEINDEX,RichEditX->Lines->Count-1, 0);//устанавливаемпозициюкаретки
RichEditX->Perform(EM_SCROLLCARET,0, 0);//прокручиваем поле к позиции каретки
}
//—————————————————————————
//Основываясь навходной последовательности формируем закон распределения
void__fastcall TMainForm::ZakonRaspr(AnsiString InSequence, double *P)
{
//P0//P1 //P00 //P01 //P10 //P11
P[0]= 0; P[1] = 0; P[2] = 0; P[3] = 0; P[4] = 0; P[5] = 0;
int i;
//по определённомуалгоритму формируем закон распределения
for(i= 1; i
{
switch(((AnsiString)InSequence[i]+(AnsiString)InSequence[i+1]).ToInt())
{
case00:
{
P[0]+= 2;//P0
P[2]++; //P00
}break;
case01:
{
P[0]++;//P0
P[1]++;//P1
P[3]++;//P01
}break;
case10:
{
P[1]++;//P1
P[0]++;//P0
P[4]++;//P10
}break;
case11:
{
P[1]+= 2;//P1
P[5] ++; //P11
} break;
}
}
P[2] /=InSequence.Length()/2;// P00/(длина входной последовательности разделённая на2)
P[3] /=InSequence.Length()/2;// P01/(длина входной последовательности разделённая на2)
P[4] /=InSequence.Length()/2;// P10/(длина входной последовательности разделённая на2)
P[5] /=InSequence.Length()/2;// P11/(длина входной последовательности разделённая на2)
P[0] /=InSequence.Length(); // P0/(длина входной последовательности)
P[1] /=InSequence.Length(); // P1/(длина входной последовательности)
}
//—————————————————————————
//генерирует случайноечисло с плавающей запятой в заданном диапазоне
double__fastcall TMainForm::Randouble(double min, double max)
{return(double)rand()/(double)RAND_MAX*(max-min)+min;
}
//—————————————————————————
//генерируемпоследовательность из случайных чисел
AnsiString GenSequence;
AnsiString__fastcall TMainForm::GenModel(double *P, int Count)
{
doublePi1, Pi2, Pi3, Pi4;
GenSequence= “”;
Pi1= P[2];
Pi2= P[2] + P[3];
Pi3= P[2] + P[3] + P[4];
Pi4= P[2] + P[3] + P[4] + P[5];
doublernd;
for(int i = 0; i
{
rnd= Randouble(0.0, 1.0);
if(rnd
if((rnd >= Pi1) && (rnd
if((rnd >= Pi2) && (rnd
if((rnd >= Pi3) && (rnd
return GenSequence;}
//—————————————————————————
//моделирование случайнойпоследовательности двоичных чисел
void__fastcall TMainForm::ModelSlPosl(double *P, int Count, bool Prn)
{
double**experiment = new double*[3];
for(int i = 0; i
{experiment[i]= new double[6];
ZakonRaspr(GenModel(P,Count), experiment[i]);
}
REditAddColor(RichEdit1,”|———————————————————————————————————|”,clBlue);
REditAddColor(RichEdit1,”| Длина| | Номер опыта| Среднее| Теоретическое| |”, clBlue);
REditAddColor(RichEdit1,”|последовательности|Параметры|1 | 2 | 3 | значение| значение|Ошибка|”,clBlue);
REditAddColor(RichEdit1,”|—————————|—————|—–|——|——|————-|——————–|———|”,clBlue);
AnsiStringPrnScr;
doubleSrZnach, Err;
AnsiStringPrametru[6] ={«P0»,«P1»,«P00»,«P01»,«P10»,«P11»};
for(inti = 0; i
{SrZnach= (experiment[0][i] + experiment[1][i] + experiment[2][i])/3;
Err= fabs(P[i] — (experiment[0][i] + experiment[1][i] + experiment[2][i])/3);
PrnScr.sprintf(“|%18d|%9s|%5.3lf|%5.3lf|%5.3lf|%9.3lf|%15.3lf|%6.3lf|”,Count, Prametru[i], experiment[0][i], experiment[1][i], experiment[2][i],SrZnach, P[i], Err); REditAddColor(RichEdit1, PrnScr, clBlue);
switch(i)
{case0:
{LineP0->Add(SrZnach,«приN = » + (AnsiString)Count, clRed);
if(Prn)LineP0->Add(P[i],«Теорет.»,clRed);
} break;
case 1:
{
LineP1->Add(SrZnach,«приN = » + (AnsiString)Count, clGreen);
if(Prn)LineP1->Add(P[i],«Теорет.»,clGreen);
} break;
}
}
for(int i = 0; i
delete [] experiment;
}
//—————————————————————————
void__fastcall TMainForm::StartSimulationClick(TObject *Sender)
{LineP0->Clear();
LineP1->Clear();
RichEdit1->Lines->Clear();
StartSimulation->Enabled= false;
double P[6];
//формируем законраспределения
ZakonRaspr(InSequence->Lines->Strings[0],P);
//проводиммоделирование случайной последовательности двоичных чисел
//для различных длинпоследовательностей
ModelSlPosl(P, 100);
ModelSlPosl(P,1000);
ModelSlPosl(P,10000, true);
StartSimulation->Enabled= true;}
//—————————————————————————
При моделированиииспользовался генератор случайных чисел с равномерным распределением: примоделировании события А, наступающего с вероятностью Р, берется случайное числох из равномерного распределения на интервале (0, 1) и сравнивается с Р. Если х≤Р,то считается, что событие А наступило, в противном случае наступило событиеĀ.
Моделирование случайнойпоследовательности двоичных чисел проводилось для различных длинпоследовательностей (N=100,N=1000, N=10000),результаты которого представлены на рис. 1, 2
/>
Рис. 1

/>
Рис. 2
 

3. Вывод
 
Примоделировании
В ходе выполнениязадания смоделировали работу генератора случайных двоичных чисел,подчиняющегося равномерному закону распределения, заданного с помощью моделиГильберта; ограниченной последовательности 0 и 1. Мы представили законыраспределения случайных чисел, заданных в неявном виде, в виде гистограмм, адалее с помощью языка программирования С++ обеспечили процедуру генерированияслучайных чисел, с различными длительностями их последовательности,соответствующих вышеуказанному закону распределения.Изрис.1,2 видно, что при увеличении длины последовательности экспериментальнополученные данные приближаются к теоретическим данным.