
Z9411_КафкаРС_ИМ_ЛР1
.docxaxis[0].legend()
# Строим график зависимости оценок коэффициента вариации от объема выборки
axis[1].axhline(nu_t, color='red', label='Теоретическое значение')
axis[1].plot(N_array, nu_list, label='Рассчитанное значение')
axis[1].set_title('График зависимости\nоценок коэффициента вариации от объема выборки')
axis[1].set_xlabel('Размер выборки')
axis[1].set_ylabel('Оценка коэффициента вариации')
axis[1].legend()
plt.show()
def erlang_model(k, lmbda, N=10000):
'''Функция моделирования Эрланговского распределения'''
# Текущая оценка интенсивности и коэффициента вариации потока
lmbda_old, nu_old = 1, 1
# Списки оценок интенсивности и коэффициента вариации потока для разных N
lmbda_list, nu_list = [], []
# Список значений выборки эрланговского распределения
u_list = []
# Счетчик цикла
loop_cnt = 0
# Список зничений объема выборки при которых производились
# расчеты интенсивности и коэффициента вариации потока
N_array = []
while True:
# Добавляем N случайных значений эрланговского закона распределения
u_list.extend(random_erlang_val(k, lmbda, N * 2**loop_cnt))
# Добавляем значение нового объема выборки
N_array.append(len(u_list))
# Оценка Мат. ожидания и Дисперсии
me = np.mean(u_list)
sigma = np.std(u_list)
# Оценка новых значений интенсивности и коэффициента вариации потока
lmbda_new = 1/me
nu_new = sigma/me
# Добавление новых отценок в списки
lmbda_list.append(lmbda_new)
nu_list.append(nu_new)
# Проверка достаточности выборки
if abs((lmbda_new - lmbda_old) / lmbda_old) <= 0.01 and abs((nu_new - nu_old) / nu_old) <= 0.01:
break
# Перенос новых оценок на место старых
lmbda_old = lmbda_new
nu_old = nu_new
loop_cnt += 1 if len(u_list) != N else 0
# Построение графика по сформированному распределению
ploting_erlang_distribution(k, lmbda, data=u_list, add_hist=True)
# Построение графика зависимости оценок интенсивности и коэффициента вариации потока
ploting_lambda_nu(k, lmbda, lmbda_list, nu_list, N_array)
return u_list, lmbda_list, nu_list
def main():
k, lmbda = 4, 8
ploting_erlang_distribution(k, lmbda, N=10000)
erlang_model(k, lmbda, N=1)
return 0
if __name__ == "__main__":
main()