气ython风雨 发表于 2024-3-8 10:54:12

WRFOUT计算风速Weibull分布


前言
风 能 随 风 速 而 变 化 。风 速 的 变 化 的 随 机 性 ,导 致 了风 电 的 不 稳 定 性 。为 了 更 大 限 度 地 利 用 风 能 ,应 该 对 其风 速 的 变 化 特 性 加 以 了 解 。风 速 分 布 一 般 为 正 态 偏 态分 布 , 用 于 拟 合 风 速 分 布 的 模 型 很 多 , 而 在 风 能 计 算 中应 用 最 广 泛 的 是 两 参 数 的 威 布 尔 分 布 , 并 且 利 用 风 速的 威 布 尔 双 参 数 可 以 计 算 风 能 资 源 的 有 关 参 数 。风 速的 变 化 特 性 经 常 用 两 参 数 的 统 计 分 布 函 数 — Weibull 模型 来 描 述 。已 有 的 研 究 表 明 ,Weibull 函 数 的 优 点 在 于它 对 风 能 密 度 评 估 有 很 大 的 适 应 性 和 简 化 性 , 尤 其 对长 期 的 风 速 数 据 有 很 好 的 拟 合 性 。

from《基于GIS的江苏省陆地风能资源潜力评估及微观选址》
Weibull 分布函数密度的表达式为


其中v 为风速,m/s;c 为 尺 度 参 数 ,反 映 该 风 电 场 的 平 均风速;k 为形状参数,1≤k≤10;k,v,c 均大于 0

导入库
from wrf import uvmet, to_np, getvar, interplevel, smooth2d, get_cartopy, cartopy_xlim, cartopy_ylim, latlon_coords,destagger
import numpy as np
from netCDF4 import Dataset
import metpy.calc as mpcalc
import xarray as xr
from metpy.units import units
import matplotlib.pyplot as plt
from matplotlib.cm import get_cmap
from matplotlib.colors import from_levels_and_colors
import cartopy.crs as ccrs
import cartopy.feature as cfeature
import cartopy.io.shapereader as shpreader
from cartopy.feature import NaturalEarthFeature
from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter
from cartopy.mpl.gridliner import LATITUDE_FORMATTER, LONGITUDE_FORMATTER
import cmaps
from glob import glob
import metpy.calc as mpcalc
import metpy.constants as constants
# 打开wrfout文件
ncfile = Dataset("/home/mw/input/wrfout3385/wrfout_d02_2022-07-14_0800.nc")

获取数据
一般都是以年月风速进行计算的,此处简化为wrfout小时100m处的风速数据
z = getvar(ncfile,"z")
ws = getvar(ncfile, "wspd_wdir", units="m s-1")
hgt = getvar(ncfile, "HGT")
gmp = z - hgt
ws100 = interplevel(ws, gmp ,100)
# 将数组展平为1D数组
ws100fl = ws100.values.flatten()
计算与绘图
# 计算威布尔分布的参数
k, loc, c = weibull_min.fit(ws100fl, floc=0)
# 生成威布尔分布的概率密度函数
x = np.linspace(0, 25, 1000)# 设定风速范围
pdf = weibull_min.pdf(x, k, loc, c)
# 生成威布尔分布的随机样本
samples = weibull_min.rvs(k, loc, c, size=1000)
plt.figure()
# 绘制韦伯分布对应的柱状图
plt.hist(samples, bins=25, density=True, alpha=0.5, label='Histogram')
# 绘制韦伯分布对应的柱状图
plt.plot(x, pdf, label='Weibull PDF')
plt.xlabel('Wind Speed (m/s)')
plt.ylabel('Probability Density')
plt.title('Weibull Distribution of Wind Speed')
plt.legend()
plt.show()


print(k,c)

2.5044236083581928 5.818903248872731
# 计算威布尔分布的累积分布函数
cdf = weibull_min.cdf(x, k, c, scale)
plt.figure()
# 绘制威布尔分布的CDF图
plt.plot(x, cdf, label='Weibull CDF')
plt.xlabel('Wind Speed (m/s)')
plt.ylabel('Cumulative Probability')
plt.title('Weibull Cumulative Distribution Function of Wind Speed')
plt.legend()
plt.show()


初次涉猎,如有错误还请指正

完整代码与文件回复”威布尔分布“获取

文章来源于微信公众号:气ython风雨

我和香蕉有个约会 发表于 2024-4-27 02:45:48

我认为你的方法还可以在这几个方面进行改进。
页: [1]
查看完整版本: WRFOUT计算风速Weibull分布