Добавил:
SuperciliousMe
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лаба 3 / 17_var
.pyimport sys
import warnings
import numpy as np
from scipy.stats import erlang
import matplotlib.pyplot as plt
warnings.filterwarnings("ignore")
def plot_results(theory_val, exper_vals, n_vals, param_type: bool, fig: int):
if param_type:
plt.figure(fig)
plt.title('Сравнение интенсивностей')
plt.ylabel('Интенсивность')
else:
plt.figure(fig)
plt.title('Сравнение вариаций')
plt.ylabel('Коэффициент вариации')
plt.plot(n_vals, exper_vals, label='Результаты эксперимента')
plt.plot(n_vals, [theory_val]*len(n_vals), label='Теоретическое значение')
plt.grid()
plt.xlabel('Количество заявок')
plt.legend()
def plot_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', label=rf'$ k = {k}; \ \theta = {theta}$')
plt.title('Эрланговское распределение')
plt.legend()
plt.grid()
def experiment(k, theta, N):
lambda_old, nu_old = sys.float_info.max, sys.float_info.max
lambda_new, nu_new = 0, 0
lambdas, nus, Ns = [], [], []
# Пока изменение значения > 0.1%
while (abs((lambda_new - lambda_old)/lambda_old) > .001) | (abs((nu_new - nu_old)/nu_old) > .001):
Ns.append(N)
lambda_old, nu_old = lambda_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)
lambda_new = 1/m_u
nu_new = sigma_u/m_u
lambdas.append(lambda_new)
nus.append(nu_new)
N *= 2
return lambdas, nus, Ns
if __name__ == "__main__":
# Базовые параметры
k, theta = 1, 17
# Функция закона распределения
plot_pdf(k, theta, fig=1)
# Расчет теоретических параметров потока
lambda_theory = theta/k
nu_theory = 1/np.sqrt(k)
print('\nТеоретические значения:')
print(f' ~ Интенсивности потока: {lambda_theory}\n ~ Коэффициента вариации: {nu_theory}')
# Расчет экспериментальных параметров потока
lambdas_experiment, nus_experiment, ns = experiment(k, theta, 10000)
print('\nЭкспериментальные значения:')
print(f' ~ Интенсивности потока: {lambdas_experiment[-1]}\n ~ Коэффициента вариации: {nus_experiment[-1]}')
# Построение графиков зависимостей
plot_results(lambda_theory, lambdas_experiment, ns, param_type=True, fig=2)
plot_results(nu_theory, nus_experiment, ns, param_type=False, fig=3)
plt.show()