Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лаба 2 / Отчет_лаба2

.docx
Скачиваний:
3
Добавлен:
05.01.2024
Размер:
214.08 Кб
Скачать

ГУАП

КАФЕДРА ПИ

ОТЧЕТ ЗАЩИЩЕН С ОЦЕНКОЙ

ПРЕПОДАВАТЕЛЬ

ст. преподаватель

М. Н. Шелест

должность, уч. степень, звание

подпись, дата

инициалы, фамилия

ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ № 2

ДАТЧИК СЛУЧАЙНЫХ ЧИСЕЛ. ПОСТРОЕНИЕ ГИСТОГРАММ

по курсу: Имитационное моделирование

РАБОТУ ВЫПОЛНИЛ

СТУДЕНТ ГР. №

подпись, дата

инициалы, фамилия

Санкт-Петербург 2023

Цель работы

Изучение алгоритмов получения на ЭВМ чисел с заданным законом распределения и построение гистограмм.

Вариант задания

Вариант №22

Закон распределения: Нормальный

Параметры закона:

График моделируемого закона распределения

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

Рисунок 1 – Формула моделируемого закона

Далее, на рисунке 2 показана функция распределения моделируемого закона.

Рисунок 2 – Функция распределения закона

Описание разработанной программы

Были созданы 2 подпрограммы: реализация моделируемого закона распределения и построения гистограммы выборки.

Рассмотрим первую из них. Принцип работы данной программы состоит в следующем: пользователь вводит параметры необходимого нормального распределения (мат ожидание, дисперсию и количество чисел), затем происходит генерация N случайных чисел, распределённых нормально. Далее, благодаря преобразованию Бокса-Мюллера создаются числа, распределённые нормально. Список используемых переменных данной программы представлен в таблице 1, а в листинге 1 – код созданной подпрограммы.

Таблица 1. Список используемых переменных

Имя переменной

Тип данных

Описание переменной

Uni_nums

Массив дробных чисел

Массив равномерно распределённых точек

Norm_nums

Массив дробных чисел

Массив нормально распределённых точек

Z0

Дробное число

Нормально распределённое дробное число

Z1

Дробное число

Аналогично

Листинг 1. Программа моделирования случайной величины

def normal(loc: float = ..., scale: float = ..., size: float = ...) -> float:

uni_nums = np.random.uniform(size=size)

norm_nums = []

for i in range(0, len(uni_nums), 2):

z0 = ((np.sqrt(-2*np.log(uni_nums[i])) * np.cos(2*np.pi*uni_nums[i+1])) * scale) + loc

z1 = ((np.sqrt(-2*np.log(uni_nums[i])) * np.sin(2*np.pi*uni_nums[i+1])) * scale) + loc

norm_nums.append(z0)

norm_nums.append(z1)

return norm_nums

Далее, рассмотрим вторую из созданных подпрограмм, а именно программу создания экспериментальной гистограммы. Логика программы состоит в следующем: сначала генерируется случайная величина, распределённая нормально. Затем, это число добавляется в массив случайных чисел. Затем, смотрим, к какому интервалу принадлежит данное число. Если оно попадает в какой-то интервал, то к количеству чисел в данном интервале прибавляется единица. Если же не попадает, то происходит расчет ошибки непопадания чисел в границы интервалов. Если данное число больше чем порог, то происходит перерасчет границ интервалов, а также количества чисел в каждом интервале. Список используемых переменных данной подпрограммы показан в таблице 2, а код созданной программы – листинг 2.

Таблица 2. Список используемых переменных

Имя переменной

Тип данных

Описание переменной

nums

Массив дробных чисел

Массив нормально распределённых точек

X_min

Дробное число

Минимально сгенерированное число

X_max

Дробное число

Максимально сгенерированное число

delta

Дробное число

Разница между центрами интервалов

N

Целое число

Количество чисел в массиве nums

Amount_of_parts

Целое число

Количество интервалов

Mean

Массив дробных чисел

Массив математических ожиданий

Var

Массив дробных чисел

Массив дисперсий

sizes

Массив целых чисел

Массив количества чисел в массиве nums

p

Дробное число

% чисел, не попавших в интервалы

ids

Массив целых чисел

Массив принадлежностей к интервалам

borders

Массив дробных чисел

Массив границ интервалов

Листинг 2. Программа построение экспериментальной гистограммы

def hist(show_hist: bool, get_mean_and_var: bool = False):

# 1

nums = []

x_min, x_max, delta, N, amount_of_parts = 0, 0, 0, 0, 10

borders, N_i = np.array([]), [0] * amount_of_parts

if get_mean_and_var:

mean, var, sizes = [], [], []

while min(N_i[0:amount_of_parts-1]) != 100:

# 3 (формирование случайного число и добавление его к выборке)

alpha, _ = normal(0.5, 0.1, 2)

nums.append(alpha)

N = len(nums)

# 4 (распределение чисел)

ids = np.searchsorted(borders, alpha)

if ids < len(borders) and alpha > x_min:

N_i[ids-1] += 1

# 5 (подсчет вероятности ошибки)

p = (N - np.sum(N_i))/N

# 6 (изменение размеров)

if p >= 0.01:

x_min, x_max = min(nums), max(nums)

delta = (x_max - x_min)/(amount_of_parts-1)

borders = np.linspace(x_min, x_max, amount_of_parts, True)

ids = np.searchsorted(borders, nums)

N_i = [0] * amount_of_parts

for id in ids:

N_i[id] += 1

# Расчет мат ожидания и дисперсии выборки

if get_mean_and_var:

mean.append(np.mean(nums))

var.append(np.var(nums)*(amount_of_parts))

sizes.append(N)

# 8 (Формирование вектора Y)

y = [n/(N*delta) for n in N_i]

x = []

x.append(x_min + delta/2)

for i in range(amount_of_parts-1):

x.append(x[i] + delta)

# Построение гистограммы

if show_hist:

x_axis = np.linspace(x_min, x_max, 100)

plt.figure(1)

plt.bar(x, y, width=delta)

plt.plot(x_axis, norm.pdf(x_axis, loc=0.5, scale=0.1), color='red')

plt.title('Гистограмма нормального распределения')

if get_mean_and_var:

plt.figure(2)

plt.title('График зависимости мат ожидания от количества')

plt.plot(sizes, mean)

plt.plot(sizes, [0.5]*len(sizes))

plt.figure(3)

plt.title('График зависимости дисперсии от количества')

plt.plot(sizes, var)

plt.plot(sizes, [0.1]*len(sizes))

plt.show()

return N_i

Табличное представление результатов анализа

Далее, после завершения создания экспериментальной гистограммы, необходимо заполнить таблицу распределения элементов выборки по квантам гистограммы. На рисунке 3 показана заполненная таблица.

Рисунок 3 – Таблица распределения элементов

Гистограмма сформированной выборки

После таблицы распределения, необходимо на её основе построить гистограмму распределения сформированной выборки. На рисунке 4 показана созданная гистограмма вместе с теоретическим законом распределения.

Рисунок 4 – Экспериментальная гистограмма

Графики зависимости

Помимо вышеприведённой гистограммы, необходимо построить графики зависимости оценки математического ожидания и дисперсии от объема выборки. Данные графики приведены на рисунках 5-6 соответственно.

Рисунок 5 – График зависимости математического ожидания от объема выборки

Рисунок 6 – График зависимости дисперсии от объема выборки

Выводы

Таким образом, подводя итог ко всем выше проделанным операциям, можно сделать вывод о том, что в ходе выполнения данной лабораторной работы было произведено преобразование из случайной величины, распределённой равномерно, к случайной величине, распределённой нормально с заданными параметрами распределения. Также, была создана программа для создания экспериментальной гистограммы. На ней видно, что распределение случайной величины является нормальным.

Соседние файлы в папке Лаба 2