/
beeval
/
repository
Обзор
Документация
Войти
/
beeval
/
repository
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
ADII/3.py
90 строк
4 KB
beeval
update ADII/3.py
06 окт 2025, 21:44
06 окт 2025, 21:44
1fb1116
Код
Авторство
О чём код?
import numpy as np import matplotlib.pyplot as plt from scipy.stats import expon # Задание начальных параметров days_in_week = 7 hours_per_day = 24 num_simulations = 1000 temperature_range = (20, 35) # Температура от 20 до 35 °C # Экспоненциальное распределение с настройкой диапазона def generate_exponential_temperature(days, hours_per_day, temp_range): """Генерирует массив почасовых температур за указанный период.""" scale_param = temp_range[1] - temp_range[0] shift_param = temp_range[0] return expon.rvs(scale=scale_param, loc=shift_param, size=(days, hours_per_day)) # Функция расчета средненедельной температуры def calculate_weekly_avg(temp_data): daily_means = np.mean(temp_data, axis=1) # Средние за каждый день weekly_mean = np.mean(daily_means) # Общая неделя return weekly_mean # Генерация данных и расчет средних weekly_averages = [] for _ in range(num_simulations): temps = generate_exponential_temperature(days_in_week, hours_per_day, temperature_range) avg_temp = calculate_weekly_avg(temps) weekly_averages.append(avg_temp) # Гистограмма результатов plt.hist(weekly_averages, bins=30, density=True, color='skyblue', edgecolor='black') plt.title('Гистограмма средненедельных температур') plt.xlabel('Средняя температура за неделю') plt.ylabel('Частота') plt.show() # Центральная предельная теорема проверяется визуально на форме графика # Далее проведём оценку вероятности жарких дней # Расчёт вероятности жарких дней (задача 3) hot_threshold = 30 # Пусть жарким считается день с температурой >= 30 °C # Оценка вероятности для еженедельного наблюдения probs_hot_days_weekly = [] for _ in range(num_simulations): temps = generate_exponential_temperature(days_in_week, hours_per_day, temperature_range) hot_days_count = np.sum(np.max(temps, axis=1) >= hot_threshold) # Жарких дней за неделю probs_hot_days_weekly.append(hot_days_count / days_in_week) # Гистограмма вероятности жарких дней plt.hist(probs_hot_days_weekly, bins=30, density=True, color='pink', edgecolor='black') plt.title('Гистограмма вероятности жарких дней (еженедельно)') plt.xlabel('Доля жарких дней за неделю') plt.ylabel('Частота') plt.show() # Теперь оценим зависимость от размера выборки (7 vs 30 дней) days_in_month = 30 monthly_averages = [] for _ in range(num_simulations): temps = generate_exponential_temperature(days_in_month, hours_per_day, temperature_range) avg_temp = calculate_weekly_avg(temps.reshape(-1, hours_per_day)) # Средний за месяц monthly_averages.append(avg_temp) # Гистограмма месячных средних plt.hist(monthly_averages, bins=30, density=True, color='lightgreen', edgecolor='black') plt.title('Гистограмма среднемесячных температур') plt.xlabel('Средняя температура за месяц') plt.ylabel('Частота') plt.show() # Оценка вероятности жарких дней для месячного наблюдения probs_hot_days_monthly = [] for _ in range(num_simulations): temps = generate_exponential_temperature(days_in_month, hours_per_day, temperature_range) hot_days_count = np.sum(np.max(temps, axis=1) >= hot_threshold) # Жарких дней за месяц probs_hot_days_monthly.append(hot_days_count / days_in_month) # Гистограмма вероятности жарких дней plt.hist(probs_hot_days_monthly, bins=30, density=True, color='yellow', edgecolor='black') plt.title('Гистограмма вероятности жарких дней (ежемесячно)') plt.xlabel('Доля жарких дней за месяц') plt.ylabel('Частота') plt.show()