2
.docxГУАП
КАФЕДРА № 41
ОТЧЕТ
ЗАЩИЩЕН С ОЦЕНКОЙ
ПРЕПОДАВАТЕЛЬ
ассистент |
|
|
|
М.Н. Шелест |
должность, уч. степень, звание |
|
подпись, дата |
|
инициалы, фамилия |
ОТЧЕТ О ЛАБОРАТОРНОЙ РАБОТЕ №2 |
Датчики случайных чисел. Построение гистограмм |
по курсу: ИМИТАЦИОННОЕ МОДЕЛИРОВАНИЕ |
|
|
РАБОТУ ВЫПОЛНИЛА
СТУДЕНТКА ГР. |
4716 |
|
|
|
С.А. Янышева |
|
|
|
подпись, дата |
|
инициалы, фамилия |
Санкт-Петербург
2020
Лабораторная работа №2
Датчики случайных чисел. Построение гистограмм
Цель работы
Изучение алгоритмов получения на ЭВМ чисел с заданным законом распределения и построения гистограмм.
Вариант № 20
№ варианта |
|
|
20 |
Эрланговский |
k = 5, = 3 |
Ход выполнения работы
Графики функции
Графики зависимости оценок математического ожидания и дисперсии от объема выборки.
Рисунок 1 – Гистограмма сформированной выборки
Рисунок 2 – График зависимости оценки мат. ожидания от объёма выборки
Рисунок 3 – График зависимости оценки дисперсии от объёма выборки
Число элементов, попавших в данный интервал:
Номер интервала |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
Число элементов, попавших в данный интервал |
18751 |
91875 |
107693 |
69445 |
32814 |
12609 |
4432 |
1375 |
385 |
100 |
Таблица 1 – Распределение элементов выборки по квантам гистограммы
Описание разработанной программы
Листинг 1
from matplotlib import pyplot as plt import numpy as np import scipy.stats as st def gamma_hist(k, lmb, n): f_exp = lambda lmb: -(1 / lmb) * np.log(np.random.random()) f_gamma = lambda k, lmb: sum([f_exp(lmb) for _ in range(k)]) sample, steps, mu, d = [], [], [], [] res = [0, 1000] x_min = x_max = delta = 0 while min(res) < n: sample.append(f_gamma(k, lmb)) if len(sample) % 100 == 0: mu.append(sum(sample) / len(sample)) d.append(np.var(sample)) if len(sample) < 1000: continue elif x_min <= sample[-1] <= x_max: bar = int((sample[-1] - x_min) / delta) res[((bar + 1) * (bar <= len(res) - 1)) - 1] += 1 if 1 - sum(res) / len(sample) < 0.01: continue x_min = min(sample) x_max = max(sample) delta = (x_max - x_min) / 10 steps = [i * delta for i in range(0, 11)] res = [0] * 10 # Количество попавших в res[i] интервал элементов выборки # Запронение интервалов гисторгаммы for i in sample: bar = int((i - x_min) / delta) res[((bar + 1) * (bar <= len(res) - 1)) - 1] += 1 print(res) return sample, mu, d def main(): k, lmb = 5, 3 sample, mu, d = gamma_hist(k, lmb, 100) plt.xlim(0, 10) x = np.linspace(0, 10, 10000) plt.hist(sample, density=True, bins=12, label="Values") plt.plot(x, st.gamma.pdf(x, k, scale=1 / lmb), color="red") plt.ylabel('Probability') plt.show() plt.plot([100 * i for i in range(len(mu))], mu) plt.plot([100, len(mu) * 100], [k / lmb] * 2) plt.show() plt.plot([100 * i for i in range(len(d))], d) plt.plot([100, len(d) * 100], [k / (lmb ** 2)] * 2) plt.show() if __name__ == "__main__": main()
|
Выводы
В ходе лабораторной работы был сформирован датчик случайных чисел с заданным законом распределения, построена гистограмма плотности распределения вероятности, а также графики зависимости оценки мат. ожидания от объёма выборки и зависимости оценки дисперсии от объёма выборки.