Advertisement
Infiniti_Inter

4 вариант 10

Apr 26th, 2022
885
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.20 KB | None | 0 0
  1. from sympy import solve
  2. from sympy.abc import x
  3. from scipy.optimize import fsolve
  4. import matplotlib.pyplot as plt
  5.  
  6. lam = 1/5
  7. mu = 1/3
  8. a = 1
  9. b = 8
  10. n = 10
  11. def get_r(x):
  12.     return  x + x**2 + x**3 + x**4 + x**5 + x**6 - lam / mu
  13. r = fsolve(get_r, [0,1])[1]
  14.  
  15. def get_p_0(r, a):
  16.   return (a/(1 - r) + (r**(a + 1) - r**(b + 1))/(1 - r)**2)**(-1)
  17.  
  18. def get_p_q():
  19.   return get_p_0(r, a)
  20.  
  21. def get_p_n(r, n):
  22.     return (get_p_0(r, a) * r**(n + 1))*((1 - r**b)/(1 - r))
  23.  
  24. def get_avg_queue(r, a, b):
  25.     p_0 = get_p_0(r, a)
  26.     temp1 = p_0/(1-r)
  27.     temp3 = (r**2*(a*r**(a-1)*(1-r)-(1-r**a)))/(1-r)**2
  28.     temp4 = p_0*(1-r**b)/(1-r) * (r**2 / (1-r)**2)
  29.     avg_queue = temp1 * temp3 + temp4
  30.     return avg_queue
  31.  
  32. def get_w(lam, r, a, b):
  33.   z = get_avg_queue(r, a, b)
  34.   return z/lam
  35. def get_z0(r,a):
  36.     return 1/(1-get_p_0(r, a))
  37.  
  38. def get_n(r,a):
  39.     return 1/(get_z0(r,a)-1)
  40.  
  41. print ('r = ', r)
  42. print('Cреднее время ожидания подъемника: ', get_w(lam, r, a, b))
  43. print('Cреднее число человек, находящихся  в  подъемнике: ', get_n(r,a)-get_avg_queue(r, a, b))
  44. print('Среднее число человек, ожидающих подъема: ', get_avg_queue(r, a, b))
  45. print('Вероятность ожидания в очереди: ', 1 - get_p_0(r, a))
  46. print('Доля времени, в течение которого подъемник используется: ', 1 - get_p_0(r, a))
  47. print('Вероятность  того,  что  в  подъемнике  находится максимальное число человек: ',1 - get_p_0(r, a) - sum([get_p_n(r, n) for n in range (b)]))
  48.  
  49. lam_arr = []
  50. p_q_arr = []
  51. w_arr = []
  52.  
  53. def get_rb7(x):
  54.     return  x + x**2 + x**3 + x**4 + x**5 + x**6 + x**7 - lam / mu
  55. def get_rb8(x):
  56.     return  x + x**2 + x**3 + x**4 + x**5 + x**6 + x**7 + x**8 - lam / mu
  57. def get_rb9(x):
  58.     return  x + x**2 + x**3 + x**4 + x**5 + x**6 + x**7 + x**8 + x**9 - lam / mu
  59. def get_rb10(x):
  60.     return  x + x**2 + x**3 + x**4 + x**5 + x**6 + x**7 + x**8 + x**9 + x**10 - lam / mu
  61. def get_rb11(x):
  62.     return  x + x**2 + x**3 + x**4 + x**5 + x**6 + x**7 + x**8 + x**9 + x**10 + x**11 - lam / mu
  63. def get_rb12(x):
  64.     return  x + x**2 + x**3 + x**4 + x**5 + x**6 + x**7 + x**8 + x**9 + x**10 + x**11 + x**12 - lam / mu
  65.  
  66. loc_r7 = fsolve(get_rb7, [0,1])[1]
  67. loc_r8 = fsolve(get_rb8, [0,1])[1]
  68. loc_r9 = fsolve(get_rb9, [0,1])[1]
  69. loc_r10 = fsolve(get_rb10, [0,1])[1]
  70. loc_r11 = fsolve(get_rb11, [0,1])[1]
  71. loc_r12 = fsolve(get_rb12, [0,1])[1]
  72.  
  73. lam_arr.append(7)
  74. lam_arr.append(8)
  75. lam_arr.append(9)
  76. lam_arr.append(10)
  77. lam_arr.append(11)
  78. lam_arr.append(12)
  79.  
  80. p_q_arr.append(1 - get_p_0(loc_r7, a) - sum([get_p_n(loc_r7, n) for n in range (7)]))
  81. p_q_arr.append(1 - get_p_0(loc_r8, a) - sum([get_p_n(loc_r8, n) for n in range (8)]))
  82. p_q_arr.append(1 - get_p_0(loc_r9, a) - sum([get_p_n(loc_r9, n) for n in range (9)]))
  83. p_q_arr.append(1 - get_p_0(loc_r10, a) - sum([get_p_n(loc_r10, n) for n in range (10)]))
  84. p_q_arr.append(1 - get_p_0(loc_r11, a) - sum([get_p_n(loc_r11, n) for n in range (11)]))
  85. p_q_arr.append(1 - get_p_0(loc_r12, a) - sum([get_p_n(loc_r12, n) for n in range (12)]))
  86.  
  87. w_arr.append(get_w(lam, loc_r7, a, 7))
  88. w_arr.append(get_w(lam, loc_r8, a, 8))
  89. w_arr.append(get_w(lam, loc_r9, a, 9))
  90. w_arr.append(get_w(lam, loc_r10, a, 10))
  91. w_arr.append(get_w(lam, loc_r11, a, 11))
  92. w_arr.append(get_w(lam, loc_r12, a, 12))
  93.  
  94. fig, ax = plt.subplots()
  95. ax.set_xlabel('Максимальная вместимость подъемника')
  96. ax.set_ylabel('Вероятность  того,  что  в  подъемнике  находится максимальное число человек')
  97. ax.plot(lam_arr, p_q_arr, marker='o')
  98. for i in range(len(p_q_arr)):
  99.     ax.annotate(f'({lam_arr[i]}; {round(p_q_arr[i], 3)})', (lam_arr[i], p_q_arr[i]))
  100. plt.show()
  101.  
  102. fig, ax = plt.subplots()
  103. ax.set_xlabel('Максимальная вместимость подъемника')
  104. ax.set_ylabel('Cреднее время ожидания подъемника')
  105. ax.plot(lam_arr, w_arr, marker='o')
  106. for i in range(len(p_q_arr)):
  107.     ax.annotate(f'({lam_arr[i]}; {round(w_arr[i], 3)})', (lam_arr[i], w_arr[i]))
  108. plt.show()
  109.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement