Программные методы имитации равномерно распределенных псевдослучайных величин

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

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

Министерство образования РФ

Новосибирский государственный технический университет

Кафедра прикладной математики

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

МОДЕЛИРОВАНИЕ И СТАТИСТИЧЕСКИЙ АНАЛИЗ

РАВНОМЕРНО РАСПРЕДЕЛЕННЫХ И ДИСКРЕТНЫХ

ПСЕВДОСЛУЧАЙНЫХ ВЕЛИЧИН

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

Группа: ПМ-01

Студенты: Кирюшина Е.С.

Русакова Ю.М.

Хижняк О.А.

Преподаватели: Чимитова Е.В.

Цой Е.Б.

Новосибирск 2003

Цель работы

Изучение программных методов имитации равномерно распределенных псевдослучайных величин на отрезке [0,1]; методов моделирования дискретных псевдослучайных величин.

Задание

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

2. Найти рекуррентное соотношение для вычисления вероятностей . Разработать и реализовать алгоритм моделирования соответствующей псевдослучайной дискретной величины.

1. Тип программного генератора моделирования псевдослучайных величин:

в) генератор Дэвиса , , , .

2. Тип дискретного распределения:

в) геометрическое , ;

, .

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

#include <stdio.h>

#include <math.h>

int i,n,m=4;

double a0=3.14159265,a1=0.542101887;

void main()

{

double x0=0.14159265,x1=0.542101887,x;

FILE *res=fopen("res.txt","wt");

printf("Print n\n");

scanf("%d",&n);

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

{

x=fmod(a0*x1+fmod(a1*x0,4)*0.25,1);

x0=x1;

x1=x;

fprintf(res,"%f\n",x);

printf("x%d=%f\n",i,x);

}

}


0.722253

0.342492

0.173855

0.592599

0.885267

0.861460

0.826334

0.712754

0.351171

0.199834

0.675389

0.148881

0.559255

0.777127

0.517210

0.730185

0.364038

0.242616

0.811539

0.582404

Достигнут уровень значимости:

α=0.42


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

#include <iostream.h>

#include <stdlib.h>

#include <conio.h>

#include <math.h>

double pp,p,a0=3.14159265,a1=0.542101887;

double x0=0.14159265,x1=0.542101887,M;

int generate()

{

//cout<< "M="<< M << endl;

int m=-1;

do

{

m++;

M=M-p;

p=p*(1.0-pp);

}  while(M>=0);

return m;

}

int main()

{

int i,n;

double* ch;

cout << "n: ";     cin >> n;

cout << "pp: ";  cin >> pp;

ch=new double[n+1];

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

{

p=pp;

M=fmod(a0*x1+fmod(a1*x0,4)*0.25,1);

x0=x1;

x1=M;

ch[i]=generate();

cout << ch[i] << endl;

}

getch();

return 0;

}

1)

n=20

p0=0.2

5     1     0     4     9     8     7     5     1     0     5     0     3     6     3     5     2     1     7     3


 

Достигнут уровень значимости:

α=0.33


2)

n=100

p0=0.1

Достигнут уровень значимости:

α=0.475

3) n=100

p0=0.7

Достигнут уровень значимости:

α=0.78

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