- •Отчет по лабораторной работе №1
- •1. Цель работы
- •2. Задание
- •3. Блок-схема алгоритма
- •4. Таблица полученных псевдослучайных чисел
- •5. Результат проверки качества полученных псевдослучайных чисел на равномерность
- •5.2 Критерий Пирсона проверки соответствия эмпирического распределения теоретическому:
- •6. Текст программы
- •7. Вывод
6. Текст программы
#include<iostream.h>
#include<stdio.h>
#include<math.h>
#include<conio.h>
#include <stdlib.h>
#include <fstream.h>
#include <time.h>
//плотность распределения Эрланга lambda=3,k=10
double erl(double x)
{
return 0.1627*pow(x,9)*exp(-3*x);
}
//получение равномерно распределенных величин:[0;1]
double get_ravn() {
return (rand() % 100) * 0.01;
}
void main()
{
int i,j,N;
double r,min,max,u,l,h,m,D,hi;
double n[10000];
int k=10;
N=1000;
ofstream fout("13.txt",ios::in);
srand(time(0));
m=0;
/*Получение случайных величин
с законом распределения Эрланга
по методу суперпозиций*/
for (i=0;i<N;i++)
{n[i]=0;
for(j=0;j<k;j++)
{
n[i]=-(log(get_ravn()+0.001))/3;
}
fout<<"n["<<i+1<<"]="<<n[i]<<endl;
m=m+n[i];
}
fout.close();
m=m*0.001;//эмпирическое математическое ожидание
cout<<"m="<<m<<endl;
D=0;
for (i=0;i<N;i++)
D=pow((n[i]-m),2);
D=D*powf((N-1),-1);//эмпирическая дисперсия
cout<<"D="<<D<<endl;
//Определение доверительных интервалов
max=n[0];
for (i=0;i<N;i++)
if (n[i]>max) max=n[i];
min=0;
cout<<endl;
cout<<"Interval:"<<endl;
cout<<"["<<min<<";"<<max<<"]"<<endl;
h=(max-min)/10;
cout<<endl;
cout<<"Shag:"<<endl;
cout<<"h="<<h<<endl;
cout<<endl;
cout<<"Doveritelnie intervali:"<<endl;
for (i=0;i<10;i++)
cout<<i+1<<" ["<<(min+i*h)<<";"<<(min+(i+1)*h)<<"]"<<endl;
cout<<endl;
//Эмпирические частоты
l=min;u=min+h;
int v[10];
for (i=0;i<10;i++)
{
r=0;
for (j=0;j<N;j++)
if ((n[j]>=l)&&(n[j]<=u)) r++;
v[i]=r;
l=u;u=u+h;
cout<<"v["<<i+1<<"]="<<v[i]<<endl;
}
cout<<endl;
//Теоретические частоты
l=min;
double vteor[10];
for (i=0;i<10;i++)
{
vteor[i]=erl(l+0.5*h)*N*h;
if (vteor[i]<1) vteor[i]=1;
cout<<"vteor["<<i+1<<"]="<<vteor[i]<<endl;
l=l+h;
}
//Критерий Пирсона
hi=0;
for (i=0;i<10;i++)
hi+=pow(vteor[i],-1)*(vteor[i]-v[i])*(vteor[i]-v[i]);
cout<<"hi="<<hi<<endl;
getch();
}
7. Вывод
В данной лабораторной работе были рассмотрены методы моделирования на ЭВМ случайных дискретных и непрерывных величин, имеющих соответствующие законы распределения. Была реализована программа получения псевдослучайных чисел, имеющих распределение Эрланга (λ=3, k=10). Проверка качества полученных величин с помощью критерия Пирсона показала, что полученное эмпирическое распределение является правильным, т.к. =11.2211 находится в доверительном интервале .