Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

lab3

.py
Скачиваний:
0
Добавлен:
27.08.2024
Размер:
2.38 Кб
Скачать
import random as rd
import matplotlib.pyplot as plt
import numpy as np
import math

# График эрланговской функции
def func():
f_exp = lambda lmd, x: -(1 / lmd) * math.log(x)
f_erlang = lambda k_, lmd, x: sum([f_exp(lmd, x) for _ in range(k_)])
k_, lmb = 4, 16
x = [i+1 for i in range(1, 100)]
values = []
for i in range(len(x)):
values.append(f_erlang(k_, lmb, 1))
plt.plot(x, [f_erlang(4,16, x[i]) for i in range(len(x))])
plt.title('График эрлановской функции')
plt.show()

# Функция экспоненицальная
f_exp = lambda lmd: -(1 / lmd) * math.log(np.random.random())
# Функция эрланговская
f_erlang = lambda k_, lmd: sum([f_exp(lmb) for _ in range(k_)])
k_, lmb = 4, 16
teor_lambda = lmb / k_
teor_nu = 1 / (k_**0.5)



def modeling(N):
tc = 0
k = 0
list_uk = []
list_lambda = []
list_nu = []
for i in range(N):
list_uk.append(f_erlang(k_, lmb))
tc += list_uk[-1]
m = np.mean(list_uk)
sigma = (np.var(list_uk))**0.5
lamba = 1 / m
nu = sigma/m
list_lambda.append(lamba)
list_nu.append(nu)
return list_lambda, list_nu



def main():
func()

N = 1000
lambda_old = 10000000
nu_old = 10000000

list_lambda, list_nu = [0], [0]
while (abs((list_lambda[-1] - lambda_old)/lambda_old) > 0.01 or
abs((list_nu[-1] - nu_old)/nu_old)) > 0.01:
list_lambda, list_nu = modeling(N)
lambda_old = list_lambda[-1]
nu_old = list_nu[-1]
N = 2*N
print('Ошибка удовлетворительная')
x = [i for i in range(len(list_lambda))]


plt.plot(x, list_lambda, label='Рассчитанное значение')
plt.plot(x, [teor_lambda for i in range(len(list_lambda))], label='Теоретическое значение')
plt.title('Интенсивность потока')
plt.legend()
plt.show()
plt.plot(x, list_nu, label='Рассчитанное значение')
plt.plot(x, [teor_nu for i in range(len(list_lambda))], label='Теоретическое значение')
plt.title('Коэффицент вариации')
plt.legend()
plt.show()

main()

Соседние файлы в предмете Имитационное моделирование