You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python生成含日度、年度波动的逐小时温度时间序列

Python实现双正弦波叠加逐小时温度序列模拟

核心逻辑是通过两个不同周期的正弦波分别表征日尺度昼夜温差、年尺度季节温差,线性叠加后加基准温度偏移即可得到目标序列,不需要做复杂的嵌套计算。

参数设定说明

X轴取平年逐小时序号,总长度为365*24=8760个时间点,两个正弦波的参数可按需调整:

  • 日波动项:周期24小时,振幅取指定值1,通过相位调整让每日最高温出现在14点、最低温出现在凌晨,符合实际昼夜温度规律
  • 年波动项:周期为全年总小时数,振幅取大于日波动的值(示例取15,对应冬夏温差30℃,可根据模拟区域气候修改),相位调整为北半球1月最冷、7月最热
  • 基准垂直偏移取指定值25,对应年平均温度

完整实现代码

import numpy as np
import matplotlib.pyplot as plt

# 1. 生成X轴:年内逐小时序号(平年共8760小时)
hour_seq = np.arange(0, 365 * 24, 1)

# 2. 定义波动参数
base_temp = 25  # 基准温度,即指定的vertical_shift
# 日尺度昼夜波动参数
day_amplitude = 1
day_period = 24
day_phase = -np.pi / 2  # 相位校准:对齐每日高低温出现时间
# 年尺度季节波动参数
year_amplitude = 15  # 季节波动振幅,可按需调整,数值越大冬夏温差越大
year_period = 365 * 24
year_phase = -np.pi / 2 + (31 * 24 * 2 * np.pi) / year_period  # 相位校准:对齐冬夏高低温出现时间

# 3. 分别计算两个尺度的波动分量
day_wave = day_amplitude * np.sin(2 * np.pi * hour_seq / day_period + day_phase)
year_wave = year_amplitude * np.sin(2 * np.pi * hour_seq / year_period + year_phase)

# 4. 叠加得到最终逐小时温度序列
temp_series = base_temp + year_wave + day_wave

# 可选:可视化验证结果
plt.figure(figsize=(12, 5))
plt.plot(hour_seq, temp_series, linewidth=0.5)
plt.xlabel('年内逐小时序号')
plt.ylabel('温度(℃)')
plt.title('双尺度叠加逐小时温度模拟结果')
plt.grid(alpha=0.3)
plt.show()

# 截取前7天查看昼夜波动细节
plt.figure(figsize=(12, 4))
plt.plot(hour_seq[:7*24], temp_series[:7*24], marker='o', markersize=2)
plt.xlabel('小时序号')
plt.ylabel('温度(℃)')
plt.title('前7天昼夜温度波动效果')
plt.grid(alpha=0.3)
plt.show()

调整注意事项

  • 如果不需要对齐实际高低温出现时间,直接把两个phase参数设为0即可,仅会改变极值点位置,不影响波动叠加的形态
  • 年振幅year_amplitude可根据模拟场景修改:模拟华南等温差小的区域可取8-10,模拟东北等温差大的区域可取18-22
  • 模拟闰年时,把总小时数、年周期参数同步改为366*24=8784即可
  • 若需要加入随机扰动模拟实际气温的无规律波动,可以在最终结果上叠加一个小振幅的正态分布噪声:temp_series += np.random.normal(0, 0.3, size=len(temp_series))

内容的提问来源于stack exchange,提问作者ArieAI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 22:06:26