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

使用pvlib获取的辐照度值异常:DNI超GHI且与PVGIS结果不符

问题分析与解决

关于DNI大于GHI的误解

你提到的“DNI值超过GHI值不符合常理”是对辐照度概念的混淆:

  • **DNI(法向直射辐照度)**是垂直于太阳光方向的平面所接收的直射辐照度,数值本身可以很高;
  • **GHI(水平面总辐照度)**是水平面上接收的总辐照度,计算公式为 GHI = DNI * cos(太阳天顶角) + DHI(散射辐照度)。
    当太阳角度较低时(比如高纬度冬季、早晚时段),cos(太阳天顶角) 接近0,此时DNI的大部分能量无法投射到水平面上,GHI主要由DHI构成,因此DNI数值远大于GHI是完全正常的物理现象,并非代码错误。

与PVGIS结果差异的解决方法

你的代码生成的是理想晴空条件下的模拟数据,和PVGIS结果差异大的原因及解决步骤如下:

1. 区分晴空数据与实际数据

PVGIS默认提供的是包含云量影响的实际/再分析辐照度数据,而你用location.get_clearsky()生成的是晴空模拟值,两者本就不同。若要对比,需在PVGIS中选择“Clear sky”模式获取晴空数据。

2. 对齐晴空模型

pvlib默认使用Ineichen晴空模型,而PVGIS默认采用REST2模型,可修改代码指定使用REST2模型来匹配:

# 替换默认模型为REST2,对齐PVGIS
clear_sky = location.get_clearsky(times, model='rest2')

3. 统一时间分辨率

PVGIS默认输出小时级数据,你的代码用1分钟分辨率,可将pvlib结果聚合为小时均值后对比:

clear_sky_hourly = clear_sky.resample('H').mean()
clear_sky_hourly.plot(figsize=(16,9))
plt.show()

4. 直接获取PVGIS数据(可选)

如果需要和PVGIS完全一致的实际辐照度数据,可使用pvlib的工具函数直接从PVGIS拉取:

import pvlib.iotools

# 获取Turku的典型气象年(TMY)数据
tmy_data, meta = pvlib.iotools.get_pvgis_tmy(
    latitude=60.4485,
    longitude=22.2976,
    map_variables=True
)

# 绘制辐照度曲线
tmy_data[['ghi', 'dni', 'dhi']].plot(figsize=(16,9))
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 13:43:14