Advertisement
Korotkodul

Laba10

Apr 9th, 2025
11
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.26 KB | None | 0 0
  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. from scipy.stats import poisson
  4.  
  5. # Полные исходные данные (20-секундные измерения)
  6. data = [
  7. [39, 41, 41, 21, 40, 26, 32, 31, 35, 43],
  8. [31, 37, 36, 39, 47, 27, 50, 49, 28, 45],
  9. [31, 37, 41, 40, 34, 37, 42, 22, 36, 34],
  10. [36, 45, 31, 41, 26, 37, 41, 33, 37, 31],
  11. [38, 27, 29, 39, 35, 42, 45, 32, 46, 31],
  12. [21, 26, 37, 47, 32, 38, 45, 32, 36, 24],
  13. [37, 37, 30, 33, 29, 42, 29, 34, 35, 38],
  14. [26, 51, 27, 29, 37, 26, 45, 33, 20, 34],
  15. [44, 45, 28, 33, 37, 31, 41, 43, 41, 33],
  16. [39, 41, 42, 30, 30, 46, 35, 30, 45, 39],
  17. [37, 40, 39, 41, 39, 41, 31, 35, 42, 39],
  18. [33, 37, 42, 40, 36, 29, 42, 32, 32, 29],
  19. [35, 30, 52, 49, 39, 40, 36, 30, 34, 41],
  20. [34, 47, 33, 45, 34, 44, 22, 29, 36, 33],
  21. [32, 30, 17, 38, 34, 32, 35, 38, 31, 35],
  22. [22, 39, 29, 28, 34, 36, 35, 36, 38, 44],
  23. [37, 35, 41, 35, 30, 31, 28, 46, 30, 37],
  24. [48, 40, 44, 41, 40, 33, 36, 32, 38, 22],
  25. [32, 43, 34, 45, 34, 46, 38, 38, 28, 39],
  26. [58, 26, 29, 41, 38, 38, 32, 39, 28, 35]
  27. ]
  28.  
  29. # Данные для 10 секунд
  30. data_10_s = np.array([5] + [6,6] + [7]*6 + [8]*8 + [9]*11 +
  31. [11]*17 + [10]*17 + [11]*17 + [12]*25 + [13]*24 +
  32. [14]*24 + [15]*23 + [16]*29 + [17]*35 + [18]*27 +
  33. [19]*34 + [20]*21 + [21]*17 + [22]*15 + [23]*14 +
  34. [24]*11 + [25]*19 + [26]*8 + [27]*5 + [28]*4)
  35.  
  36. # Обработка данных
  37. data_20_s = np.array(data).flatten()
  38. if len(data_20_s) % 2 != 0:
  39. data_20_s = data_20_s[:-1]
  40. data_40_s = data_20_s.reshape(-1, 2).sum(axis=1)
  41.  
  42. # Параметры распределений
  43. mean_10s = np.mean(data_10_s)
  44. mean_40s = np.mean(data_40_s)
  45. lambda_10s = mean_10s
  46. lambda_40s = mean_40s
  47.  
  48. # Создание фигуры
  49. plt.figure(figsize=(12, 6))
  50.  
  51. # 1. Синяя гистограмма (10 секунд)
  52. plt.hist(data_10_s,
  53. bins=np.arange(min(data_10_s)-0.5, max(data_10_s)+1.5, 1),
  54. density=True, alpha=0.5, color='blue',
  55. label=f'10 сек (μ={mean_10s:.1f})')
  56.  
  57. # 2. Красная гистограмма (40 секунд) - масштабированная для визуализации
  58. plt.hist(data_40_s/4,
  59. bins=np.arange(min(data_40_s/4)-0.5, max(data_40_s/4)+1.5, 1),
  60. density=True, alpha=0.5, color='red',
  61. label=f'40 сек (μ={mean_40s:.1f} в исходном масштабе)')
  62.  
  63. # Теоретическое распределение Пуассона для 10с
  64. x_10 = np.arange(0, 30, 0.1)
  65. plt.plot(x_10, poisson.pmf(np.round(x_10), lambda_10s), 'b--',
  66. label=f'Пуассон 10с (λ={lambda_10s:.1f})')
  67.  
  68. # Теоретическое распределение Пуассона для 40с (пунктирная гистограмма)
  69. x_40 = np.arange(0, max(data_40_s/4)+1)
  70. poisson_40 = poisson.pmf(np.round(x_40*4), lambda_40s)*4 # Правильное масштабирование
  71. plt.step(x_40, poisson_40, where='mid',
  72. linestyle='--', color='red', linewidth=2,
  73. label=f'Пуассон 40с (λ={lambda_40s:.1f})')
  74.  
  75. # Настройки графика
  76. plt.xticks(np.arange(0, 31, 5), labels=[f"{x}\n{x*4}" for x in np.arange(0, 31, 5)])
  77. plt.xlabel('Число импульсов (масштаб: 10 сек / 40 сек)')
  78. plt.ylabel('Плотность вероятности')
  79. plt.title('Сравнение распределений импульсов')
  80. plt.legend()
  81. plt.grid(True, alpha=0.3)
  82. plt.xlim(0, 30)
  83. plt.show()
  84.  
  85. # Проверка масштабирования
  86. max_exp_10 = np.max(np.histogram(data_10_s, density=True)[0])
  87. max_poisson_10 = np.max(poisson.pmf(np.arange(0, 30), lambda_10s))
  88. max_exp_40 = np.max(np.histogram(data_40_s/4, density=True)[0])
  89. max_poisson_40 = np.max(poisson.pmf(np.arange(0, 120), lambda_40s)*4)
  90.  
  91. print("Проверка масштабирования:")
  92. print(f"Максимум экспериментальных данных (10с): {max_exp_10:.4f}")
  93. print(f"Максимум Пуассона (10с): {max_poisson_10:.4f}")
  94. print(f"Максимум экспериментальных данных (40с): {max_exp_40:.4f}")
  95. print(f"Максимум Пуассона (40с): {max_poisson_40:.4f}")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement