Добавил:
Периодически делаю учебные работы по предметам ЛЭТИ и выгружаю их сюда для пополнения базы, с которой можно будет свериться. Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная 1 / Fish / 23--_Fish_лаб1

.docx
Скачиваний:
0
Добавлен:
11.01.2026
Размер:
143.21 Кб
Скачать

МИНИстерство науки и высшего образования РФ

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В.И. Ульянова (Ленина)

Кафедра информационных систем

Отчёт

по лабораторной работе №1

по дисциплине «Моделирование систем массового обслуживания»

Тема: Моделирование базовой случайной величины

Студент гр. 23--

Преподаватель

Татарникова Т. М.

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

2025

Подготовка

Цель работы

Построить датчик базовой случайной величины по заданному алгоритму и выполнить тестирование датчика на соответствие основным свойствам базовой случайной величины.

Задание

  1. Реализовать датчик базовой случайной величины по заданному алгоритму (в данной работе используется алгоритм аддитивного генератора Fish).

  2. Оценить моменты: математическое ожидание и дисперсию — и сравнить их с теоретическими значениями.

  3. Проверить равномерность распределения с помощью частотного теста, построив гистограмму относительных частот.

  4. Проверить статистическую независимость базовой случайной величины с помощью оценки корреляции между числами и для значений , равных 2, 5 и 10. Построить соответствующие графики.

Аддитивный генератор Fish

Генератор состоит из двух аддитивных генераторов и , начальные состояния которых задаются Random.

Эти последовательности прореживаются попарно в зависимости от случая: если значение младшего значащего бита равно 1, то пара используется, если 0 — игнорируется.

Выполнение работы

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

Получившиеся моменты равны , . Сравнивая с теоретическими значениями, относительные погрешности оказались малы: .

Рисунок 1. Гистограмма распределения относительных частот попаданий псевдослучайных величин.

Значения на гистограмме распределены достаточно равномерно, нет ярко выраженных спадов или подъёмов. Проверка равномерности распределения пройдена.

Построим графики зависимости коэффициента корреляции от объёма выборки.

Рисунок 2. График зависимости коэффициента корреляции

Как видно по графикам, коэффициент корреляции стремится к нулю, поэтому можно сделать вывод о независимости значений.

Выводы

Был построен датчик базовой случайной величины по алгоритму аддитивного генератора Fish и проведено тестирование этого датчика на соответствие основным свойствам базовой случайной величины. Датчик прошёл проверку равномерности распределения и проверку статистической независимости, поэтому смоделированная базовая случайная величина действительно является случайной.

Приложение А. Код программы

import random import matplotlib.pyplot as plt import numpy as np random.seed(0) a = [] s = [] for i in range(55): a.append(random.randint(0, 2**32)) for i in range(52): s.append(random.randint(0, 2**32)) i = {'a': 54, 's': 51} def next_a(): i['a'] += 1 a[i['a'] % 55] = (a[(i['a'] - 55) % 55] + a[(i['a'] - 24) % 55]) % 2**32 return a[i['a'] % 55] def next_s(): i['s'] += 1 a[i['s'] % 52] = (a[(i['s'] - 52) % 52] + a[(i['s'] - 19) % 52]) % 2**32 return a[i['s'] % 52] def next_z(): z0 = next_a() z1 = next_s() while z1 & 1 != 1: z0 = next_a() z1 = next_s() return z0 / 2 ** 32, z1 / 2 ** 32 Z = [] for k in range(1000 // 2): z = next_z() Z.append(z[0]) Z.append(z[1]) N = len(Z) M = sum(Z) / N D = (sum(z * z for z in Z) - (M * M) * N) / N print(f"Моменты: M = {M}; D = {D}") base = np.linspace(0, 1, N) plt.hist([Z, base], bins=10, weights=[np.ones_like(Z) / len(Z), np.ones_like(base) / base.size], label=['Эмпирическое', 'Теоретическое']) plt.legend(loc='lower right') plt.savefig("ms1.1.svg") plt.show() for S in (2, 5, 10): targetNs = (100, 250, 500, 1000, 1500, 2000, 2500, 3000) Rs = [] for targetN in targetNs: Z.clear() for k in range(targetN // 2): z = next_z() Z.append(z[0]) Z.append(z[1]) N = len(Z) R = 12 * sum([Z[k] * Z[k + S] for k in range(N - S)]) / (N - S) - 3 Rs.append(R) plt.plot(targetNs, Rs) plt.title(f"Коэффициент корреляции при s = {S}") plt.xlabel("N") plt.ylabel("R") plt.grid(True) plt.axhline(y=0, color='k') plt.axvline(x=0, color='k') plt.savefig(f"ms1.s{S}.svg") plt.show()

Соседние файлы в папке Fish