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