Uploaded by Рубцов Владислав

9374 ГавриловСА lr 3

advertisement
МИНОБРНАУКИ РОССИИ
САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ
ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
«ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА)
Кафедра ИС
ОТЧЕТ
По лабораторной работе №3 (вариант 11)
по дисциплине «Моделирование систем массового обслуживания»
Тема: «Моделирование непрерывной случайной величины»
Студенты гр. 9374
_______________
Гаврилов С.А.
Преподаватель
_______________
Татарникова Т.М.
Санкт-Петербург
2022
Цель работы.
Выполнить программную реализацию генератора непрерывной
случайной величины с заданным законом распределения.
Постановка задачи
Реализуется генератор непрерывной случайной величины на основе
базовой случайной величины для пяти видов распределений:
 экспоненциальное
 равномерное
 Эрланга порядка K
 нормальное
 геометрическое
Порядок выполнения работы
1. Построить на основе базовой случайной величины пять видов
распределений:
 экспоненциальное по формуле (4.9)
 равномерное по формуле (4.10)
 Эрланга порядка K по формуле (4.11)
 нормальное по формуле (4.14)
 в соответствии с вариантом задания.
2. Для всех генераторов непрерывной случайной величины
построить
гистограмму распределения вероятностей случайной величины.
3. Найти теоретические значения математического ожидания M и
дисперсии D по формулам (П2.1) и (П2.2) соответственно для
всех видов
распределений непрерывной случайной величины. Сравнить
⋀
⋀
полученные значения 𝑀 и 𝐷 с эмпирическими 𝑀 и 𝐷.
Выполнение работы
Размер выборки - 5000
3. Результаты эмпирических и теоретических значений M и D
Гистограммы распределений случайных величин
1. Экспоненциальное распределение 𝜆 = 1.
2. Равномерное распределение на интервале [0, 5]
3. Эрланга порядка K = 3, 𝜆 = 1
4. Нормальное 𝜆 = 1, 𝜎 = 0
5. Показательное распределение 𝜆 = 1.
Сравнение теоретического и математического ожиданий распределений
1. Экспоненциальное распределение.
Теоретическое математическое ожидание 𝑀 = 1
⋀
Эмпирическое математическое ожидание 𝑀 =0.5946
Теоретическая дисперсия 𝐷 = 1
⋀
Эмпирическая дисперсия 𝐷 = 0.9
Эмпирические и теоретические 𝑀 средне отличаются, D мало
отличаются. С ростом объема выборки эмпирические значения
стремятся к теоретическим.
2. Равномерное распределение на интервале [0, 5]
⋀
𝑀 = 2.5 ,
𝑀 = 2.26
⋀
𝐷 = 2.08333,
𝐷 = 2.0377
Эмпирические и теоретические 𝑀 и 𝐷 мало отличаются. С ростом
объема выборки эмпирические значения стремятся к теоретическим.
3. Эрланга порядка K = 3, 𝜆 = 1
⋀
𝑀 =3,
𝑀 = 2.453
⋀
𝐷 = 3,
𝐷 = 2.73
Эмпирические и теоретические 𝑀 средне отличаются, D мало
отличаются. С ростом объема выборки эмпирические значения
стремятся к теоретическим.
4. Нормальное 𝜆 = 1, 𝜎 = 0
⋀
𝑀 =0,
𝑀 = −0.305
𝐷 = 1,
𝐷 = 1.0088
⋀
Эмпирические и теоретические 𝑀 средне отличаются, D мало отличаются.
С ростом объема выборки эмпирические значения стремятся к
теоретическим.
6. Показательное распределение 𝜆 = 1.
⋀
𝑀 = 1, 𝑀 = 0.586
⋀
𝐷 = 1,
𝐷 = 0.917
Эмпирические и теоретические 𝑀 и 𝐷 мало отличаются. С ростом
объема выборки эмпирические значения стремятся к теоретическим.
ПРИЛОЖЕНИЕ ЗНАЧЕНИЯ 𝒙𝒊
1.26254815e-06 7.83634769e-01 1.56726828e+00 2.35090178e+00
3.13453529e+00 3.91816880e+00 4.70180230e+00 5.48543581e+00
6.26906932e+00 7.05270282e+00 7.83633633e+00
ПРИЛОЖЕНИЕ ИСХОДНЫЙ КОД
Код равномерного распределения
Файл “evenly.py”
import numpy as np
from numpy import random
import matplotlib.pyplot as plt
SIZE = 5000
A = 0
B = 5
z = random.rand(SIZE)
x = A + z * (B - A)
n = np.zeros(10)
step = (B - A) / 10
m = np.arange(step + A, B + 0.1, step)
v = n
for k in x:
for i, j in zip(m, range(len(m))):
if k < i:
v[j] += 1
break
print(v)
t = np.arange(A, B, step)
# N = plt.hist(x, 10, width= 0.1, density=True)
N = plt.bar(t + 0.2, v / SIZE, width=0.4)
plt.xticks(np.arange(A, B + 0.1, step))
plt.plot([A, B], [0.1, 0.1], color='red')
plt.title("Равномерное распределение", size=18)
print(sum(v) / SIZE)
p = v / SIZE
plt.show()
print(t)
M = sum(p * t)
print("M", A + (B - A) / 2, M)
print("D", (B - A) ** 2 / 12, sum(((t - M) ** 2) * p))
Код экспоненциального распределения
Файл “exponential.py”
import math
import numpy as np
from numpy import random
import matplotlib.pyplot as plt
from scipy import stats
SIZE = 5000
z = np.random.rand(SIZE)
# Экспоненциальное
A = 0
B = 10
bars = 10
z = random.rand(SIZE)
x = -np.log(z)
n = np.zeros(bars)
step = (B - A) / bars
m = np.arange(step + A, B + 0.1, step)
v = n
for k in x:
for i, j in zip(m, range(len(m))):
if k < i:
v[j] += 1
break
print("распр", np.round(v))
t = np.arange(A, B, step)
# N = plt.hist(x, 10, width= 0.1, density=True)
# plt.bar(t + 0.2, v / SIZE, width=0.4)
p = plt.hist(x, bins=10,density=True, width = 0.4)
plt.xticks(p[1])
print(p[1])
# plt.xticks(np.arange(A, B + 0.1, step))
# plt.plot([A, B], [0.1, 0.1], color='red')
plt.title("Экспоненциальное распределение", size=18)
print(sum(v) / SIZE)
p = v / SIZE
plt.show()
print(t)
M = sum(p * t)
print("M", 1, M)
print("D", 1, sum(((t - M) ** 2) * p))
Код распределения Эрланга
Файл “erlang.py”
import math
import numpy as np
from numpy import random
import matplotlib.pyplot as plt
from scipy import stats
SIZE = 5000
z = np.random.rand(SIZE)
z1 = np.random.rand(SIZE)
z2 = np.random.rand(SIZE)
# Эрланга k = 3
A = 0
B = 10
bars = 10
z = random.rand(SIZE)
x = -np.log(z) + -np.log(z1) + -np.log(z2)
n = np.zeros(bars)
step = (B - A) / bars
m = np.arange(step + A, B + 0.1, step)
v = n
for k in x:
for i, j in zip(m, range(len(m))):
if k < i:
v[j] += 1
break
print("распр", np.round(v))
t = np.arange(A, B, step)
# N = plt.hist(x, 10, width= 0.1, density=True)
# plt.bar(t + 0.2, v / SIZE, width=0.4)
p = plt.hist(x, bins=10,density=True, width = 0.4)
plt.xticks(p[1])
print(p[1])
# plt.xticks(np.arange(A, B + 0.1, step))
# plt.plot([A, B], [0.1, 0.1], color='red')
plt.title("Распределение Эрланга k = 3", size=18)
print(sum(v) / SIZE)
p = v / SIZE
plt.show()
print(t)
M = sum(p * t)
print("M", 3/1, M)
print("D", 3/1, sum(((t - M) ** 2) * p))
Код нормального распределения
Файл “normal.py”
import math
import numpy as np
from numpy import random
import matplotlib.pyplot as plt
from scipy import stats
SIZE = 5000
z = np.random.rand(SIZE)
z1 = np.random.rand(SIZE)
z2 = np.random.rand(SIZE)
# Эрланга k = 3
A = -3
B = 3
bars = 10
z = random.rand(SIZE)
x = np.sqrt(-2 * np.log(z)) * np.sin(2 * np.pi * z1)
n = np.zeros(bars)
step = (B - A) / bars
m = np.arange(step + A, B + 0.1, step)
v = n
for k in x:
for i, j in zip(m, range(len(m))):
if k < i:
v[j] += 1
break
print("распр", np.round(v))
t = np.arange(A, B, step)
# N = plt.hist(x, 10, width= 0.1, density=True)
# plt.bar(t + 0.2, v / SIZE, width=0.4)
p1 = plt.hist(x, bins=10,density=True, width = 0.4)
plt.xticks(p1[1])
print(p1[1])
# plt.xticks(np.arange(A, B + 0.1, step))
# plt.plot([A, B], [0.1, 0.1], color='red')
plt.title("Нормальное распределение", size=18)
print(sum(v) / SIZE)
p = v / SIZE
plt.show()
print(t)
M = sum(p * t)
print("M", 3/1, M)
print("D", 3/1, sum(((t - M) ** 2) * p))
print(sum(p1[0]*p1[1][:10]))
Код геометрическое распределения
Файл “degree.py”
import math
import numpy as np
from numpy import random
import matplotlib.pyplot as plt
from scipy import stats
SIZE = 5000
z = np.random.rand(SIZE)
# Экспоненциальное
A = 0
B = 10
bars = 10
z = random.rand(SIZE)
x = -np.log(z)
n = np.zeros(bars)
step = (B - A) / bars
m = np.arange(step + A, B + 0.1, step)
v = n
for k in x:
for i, j in zip(m, range(len(m))):
if k < i:
v[j] += 1
break
print("распр", np.round(v))
t = np.arange(A, B, step)
# N = plt.hist(x, 10, width= 0.1, density=True)
# plt.bar(t + 0.2, v / SIZE, width=0.4)
p = plt.hist(x, bins=10,density=True, width = 0.4)
plt.xticks(p[1])
print(p[1])
# plt.xticks(np.arange(A, B + 0.1, step))
# plt.plot([A, B], [0.1, 0.1], color='red')
plt.title("Показательное распределение", size=18)
print(sum(v) / SIZE)
p = v / SIZE
plt.show()
print(t)
M = sum(p * t)
print("M", 1, M)
print("D", 1, sum(((t - M) ** 2) * p))
Download