Метод моделирования дискретных случайных величин

Страницы работы

Содержание работы

МИНИСТЕРСТВО ОБЩЕГО И ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

РОССИЙСКОЙ ФЕДЕРАЦИИ

НГТУ

Кафедра ПМ

Лабораторная работа №2

Факультет:                 ПМИ

Группа:                      ПМ-86

Студенты:                  Рощина Т.Е.

Кочанов М.В.

Юркевич.А.

Преподаватели:         Тимофеев.В.С

Тишковская.С.В  

Вариант:                    д

Новосибирск-2001

1.Цель работы

Изучение методов моделирования дискретных случайных величин , эксперементальное исследование качества последова тельностей.

2.Задание

Осуществить моделирование случайной величины , распределенной попуассоновскому закону:

pi =P{ ξ =i}= λ i *e-λ / (i !)                       i=0,1,2......                                              (1)

Произвести анализ качества полученной последовательности псевдослучайных величин ,используя критерий    χ2

3.Схема моделирования

Вработе был применен общий алгоритм моделирования дискретных случайных величин ,приведенный в методических указаниях [1] к лабороторной работе .

1.Генерируем значение S равномерно распределенной на интервале [0,1] с.в.

2.Положим i=0

3.  S:=S-pi

4.  Если S<=0 ,принимаем i в качестве значения с.в. ξ ,иначе i:=i+1;goto 1

Как можно легко проверить , значения рi и pi-1 связаны соотношением рi = pi-1 * λ / i                                                                         (2)

p0 найдем в соответствии с формулой (1) ,а рi   ,0<i<=n, получим ,используя соотношение (2) .Кроме того ,(1)для i=0 также в целях оптимизации вычислений упростим следующим образом:                    

p0= e-λ ;

4.Анализ качества псевдослучайнойпоследовательности

Статистикка критерия    χ2   проверки гипотезы о распределении выглядит следующим образом :

X2m =∑j=Mj=1  j –mp0j)2/ (mp0j)

Здесь M – это кл-во интервалов группирования выборки ,m-объем выборки,

νj – кол-во эл-тов выборки ,попавших в j-ый интервалб p0j –предполагаемая вероятность того, что с.в. окажется в j-ом интервале.

При достаточно большом m гипотеза отом что  данная выборка представляет собой выборку из некоторого распределения ,которому соответствуют данные значения p0j ,не отвергается с уровнем значимостикриттерия α , если

                            

                                              X2m < χ21 –α(M-1)

Разобьем отрезок на n+1 интервалов причем      

pn+1=1- ∑j=nj=1    p ;

        Пусть M=n+1; В качестве νj  где j=0,1,2.....,положим α=0.05

5.Результаты

1.Положим n=2 , ν=0.5 , m-объем выборки =100

Значения ξ ,i

0

1

2

Вероятность p i

0.607252

0.303626

0.089122

νj

69

25

6

X2100= 3.02632 < χ21 –0.05(2 ) =  5.99

2.Положим n= 8, ν=6 , m-объем выборки =100

Знач ξ ,i

0

1

2

3

4

5

6

7

8

p i

0.0025

0.0150

0.0452

0.9051

0.1357

0.1629

0.1629

0.1396

0.2453

νj

1

3

5

7

18

17

18

12

19

X2100=  7.39229 < χ21 –0.05 (8) =15.5

3.Положим n=4 , ν=1 , m-объем выборки =100

Значения ξ ,i

0

1

2

3

4

Вероят  p i

0.368755

0.368755

0.184377

0.061459

0.016653

νj

40

41

13

5

1

X2100=2.80928 < χ21 –0.05 (4 ) =9.49

4.Возьмем еще несколько значений

Объем выборки

N

X2m

χ21 –0.05

1000

4

3.38058

9.49

10000

5

4.74487

11.1

100000

5

6.29917

11.1

6.Заключение

Использованная схема  моделирования  с.в. имеющей  пуассоновское распределение (1) ,вполне отвечает своему предназнаечнию, так как с ее помощью удалось получить большие качественные выборки .

7.Текст программы

#include <iostream> //i/o

#include <stdlib.h> //rand()

#include <math.h>

typedef double type;

type* Ps;

int N,n,k,sdv,SampleSize; 

type la,f;

int* sample;

void initPs()

{

type exp,ss;

Ps=new type[n+1];

f=1.0;

exp=2.71182818 ;

sdv=1;

Ps[0]=pow(exp,-la);

type sum=Ps[0];

cout<<"P"<<endl<<" & "<<Ps[0];

for(int i=1;i<=n-1;i++)               

{

Ps[i]=Ps[i-1]*la/i;

sum+=Ps[i];

cout<<" & "<<Ps[i];

}

Ps[n]=1.0-sum;

cout<<endl;

cout<<" & "<<Ps[n];

cout<<"Check sum for Ps: "<<sum<<endl;

}

type chi()

{

type res=0;

cout<<endl<<"Sample:"<<endl;

for(int i=0;i<=n;i++)

{

cout<<" & "<<sample[i];

res+=(sample[i])*(sample[i])/(SampleSize*Ps[i]);

}

res-=SampleSize;

cout<<endl;

return res;

}

int generate()

{

type S=rand();

S/=RAND_MAX;

int m=-1;

do

{      m++;

S-=Ps[m];

}while(S>0);

return m;

}

int main()

{

cout<<"Input n,la:"<<endl;

cin>>n>>la;

cout<<"Size of sample: ";

cin>>SampleSize;

initPs();

sample=new int[n+1];

for(int i=0;i<=n;i++)

sample[i]=0;

int cur;

for(int i=0;i<SampleSize;i++)

{        cur=generate();

sample[cur]++;

//        cout<<cur<<" ";

}

cout<<"chi^{2}_{"<<(n+1)<<"}="<<chi();

return 0;

}

Информация о работе