Лабараторная работа4
.docxМинистерство образования и науки РФ
Федеральное государственное бюджетное образовательное учреждение высшего образования
«Омский государственный технический университет»
Кафедра «Комплексная защита информации»
Отчёт по лабораторной работе № 4
по дисциплине
«Математические модели в информационных системах»
-
Выполнил
Студент гр. ИВТм-192
Козлитин Ю.В. ______________
(подп., дата)
Проверил
Профессор каф. КЗИ
Магазев А.А ______________
(подп., дата)
Омск 2019
Ход работы
Задание: разработать генератор нормальной случайной величины при помощи нормальной центральной теоремы.
Ход выполнения работы:
Для разработки генератора необходимо воспользоваться генератором равномерно распределенной псевдослучайной величины. В соответствии с центральной предельной теоремой сформированное случайное число является асимптотически нормальной величиной со средним , и дисперсией . Когда для формирования нормально распределенных случайных чисел суммируются равномерно распределенные случайные величины из интервала [0;1], то приемлемые результаты в качестве параметров стандартного нормального закона дает формула
(1)
где – это число, сгенерированное генератором равномерных псевдослучайных чисел. График распределения псевдослучайных величин, сгенерированных по формуле (1), представлен на рисунке 1.
Рисунок 1 – Распределение псевдослучайных величин, сгенерированных при помощи центральной предельной теоремы
Заключение
В данной работе был изучен ещё один способ генерации псевдослучайной величины на основе центральной предельной теоремы. Данный способ менее требователен к вычислительным ресурсам, однако, является и наименее точным относительно метода полярных координат.
Приложение А Исходный код программы
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using ThreeGenerators;
namespace CentralLimitTheorem
{
public class CLTGenerator
{
public CLTGenerator(int generatorModule = 259200)
{
this.generatorModule = generatorModule;
edg = new EvenDistributionGenerator();
}
public void generate(string filename)
{
using (FileStream stream = new FileStream(filename, FileMode.Create, FileAccess.ReadWrite))
{
StreamWriter writer = new StreamWriter(stream);
for (int i = 0; i < generatorModule; i++)
{
double next = generateNext();
writer.WriteLine(next);
}
}
}
public double generateNext()
{
double sum = 0;
for (int i = 0; i<12; i++)
{
sum += edg.generateNext();
}
return sum - 6;
}
private EvenDistributionGenerator edg;
private int a, b, generatorModule;
}
static void Main(string[] args)
{
CLTGenerator clt = new CLTGenerator();
clt.generate("results.csv");
}