Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy as np
- import matplotlib.pyplot as plt
- np.set_printoptions(precision=4)
- def expected(P, t, lmbd):
- res_q = 0
- for i in range(1, 200):
- res_q += i * P[i]
- print(f'Мат. ожидание числа требований в СМО в момент времени {t}: {res_q}')
- res_b = 0
- for i in range(1, 199):
- res_b += i * P[i+1]
- print(f'Мат. ожидание числа требреваний в очереди в момент времени {t}: {res_b}')
- print(f'Мат. ожидание длительности пребывания требования в момент времени {t}: {res_q / lmbd}\n')
- Q = 200
- P = np.zeros(Q)
- P[0] = 1
- PP = np.zeros(Q)
- t_max = 100
- dt = 0.001
- eps = dt/2
- lmbd = 4
- mu = 5
- t = 0
- p0 = [1]
- p1 = [0]
- t_task = [1, 5, 10, 20]
- while t < t_max:
- PP[0] = dt * (-lmbd * P[0] + mu * P[1])
- for j in range(1, Q-1):
- PP[j] = dt * (-(lmbd + mu) * P[j] + lmbd * P[j-1] + mu * P[j + 1])
- for j in range(Q):
- P[j] += PP[j]
- if min(map(lambda i: abs(t - i), t_task)) < eps:
- expected(P, t, lmbd)
- t += dt
- p0.append(P[0])
- p1.append(P[1])
- print(f'\n Распределение вероятностей {P}\nВероятности пребывания в состоянии 0 {p0}\nВероятности пребывания в состоянии 1 {p1}')
- t_to_plot = np.linspace(0, 100, 200)
- p0 = p0[:200]
- p1 = p1[:200]
- plt.figure(1)
- plt.plot(t_to_plot, P)
- plt.suptitle('Изменение распределения с течением времени')
- plt.figure(2)
- plt.plot(t_to_plot, p0, label='Изменение вероятности пребывания в состоянии 0')
- plt.plot(t_to_plot, p1, label='Изменение вероятности пребывания в состоянии 1')
- plt.legend()
- plt.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement