Добавил:
SuperciliousMe
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лаба 3 / 4_var
.pyimport sys
import numpy as np
import warnings
import matplotlib.pyplot as plt
from scipy.stats import erlang
warnings.filterwarnings("ignore")
def plot_erlang_pdf(k, theta, fig: int):
x = np.linspace(0, k, 1000)
y = erlang.pdf(x, k, scale=1/theta)
plt.figure(fig)
plt.plot(x, y, 'black')
plt.title('Функция распределения эрланговского закона')
plt.grid()
def plot_dependences(theor_param, exper_vars, n_vars, graph: str, fig: int):
if graph == "Интенсивность":
plt.figure(fig)
plt.title('Сравнение интенсивностей потока')
plt.ylabel('Интенсивность потока')
if graph == "Вариация":
plt.figure(fig)
plt.title('Сравнение коэффициентов вариации')
plt.ylabel('Коэффициент вариации')
plt.plot(n_vars, exper_vars, label='Результаты эксперимента')
plt.plot(n_vars, [theor_param]*len(n_vars), label='Теоретическое значение')
plt.grid()
plt.xlabel('Количество заявок')
plt.legend()
def get_experimental_vars(k, theta, N):
lmbd_old, nu_old = sys.float_info.max, sys.float_info.max
lmbd_new, nu_new = 0, 0
lmbds, nus, Ns = [], [], []
# Пока ошибка больше 0.1%
while (abs((lmbd_new - lmbd_old)/lmbd_old) > .001) | (abs((nu_new - nu_old)/nu_old) > .001):
Ns.append(N)
lmbd_old, nu_old = lmbd_new, nu_new
u = np.random.gamma(shape=k, scale=1/theta, size=N)
m_u = np.mean(u)
sigma_u = np.std(u, ddof=1)
lmbd_new = 1/m_u
nu_new = sigma_u/m_u
lmbds.append(lmbd_new)
nus.append(nu_new)
N *= 2
return lmbds, nus, Ns
if __name__ == "__main__":
# Базовые параметры
k = 4
theta = 4
# Создание функции закона распределения
plot_erlang_pdf(k, theta, 1)
# Расчет теоретических параметров потока
lmbd_theory = theta/k
nu_theory = 1/np.sqrt(k)
print('Теоретические значения:')
print(f'интенсивность потока: {lmbd_theory}\nкоэффициент вариации: {nu_theory}')
# Расчет практических параметров потока
lmbd_examples, nu_examples, n = get_experimental_vars(k, theta, 10000)
print('\nЭкспериментальные значения:')
print(f'интенсивность потока: {lmbd_examples[-1]}\nкоэффициент вариации: {nu_examples[-1]}')
# Построение графиков зависимостей
plot_dependences(lmbd_theory, lmbd_examples, n, 'Интенсивность', 2)
plot_dependences(nu_theory, nu_examples, n, 'Вариация', 3)
plt.show()