在新能源并网研究中,风电和光电的随机性始终是困扰电力系统调度的核心难题。我最近在参与某省级电网的消纳项目时,深刻体会到概率分布建模对备用容量配置的关键作用。本文将分享如何用Weibull和Beta分布分别刻画风、光出力特性,并附上可直接套用的Matlab代码。
在分析华北地区23个风电场历史数据时,我们对比了三种常见分布:
| 分布类型 | KS检验通过率 | 拟合优度R² | 参数物理意义 |
|---|---|---|---|
| Weibull | 89% | 0.932 | 明确 |
| 瑞利分布 | 67% | 0.851 | 部分明确 |
| 对数正态分布 | 72% | 0.876 | 不明确 |
Weibull分布的概率密度函数为:
matlab复制f(v) = (k/c)*(v/c)^(k-1)*exp(-(v/c)^k) % v≥0, k>0, c>0
其中形状参数k反映风速波动性(实测发现k≈2.1时最接近沿海风场特性),尺度参数c与平均风速正相关。在Matlab中可通过wblfit函数快速拟合:
matlab复制data = xlsread('wind_data.xlsx'); % 读取实测风速
[param, ci] = wblfit(data(:,2)); % 参数估计与置信区间
x = linspace(0,25,1000);
pdf = wblpdf(x,param(1),param(2)); % 生成概率密度曲线
关键技巧:对于内陆风场,建议先对数据进行-3到+3m/s的偏移修正,否则会出现cut-in风速段的拟合失真。
风机功率曲线通常分为四个阶段:
在Matlab中实现分段建模:
matlab复制function P = wind_power(v, v_cutin, v_rated, v_cutout, P_rated)
P = zeros(size(v));
idx1 = (v >= v_cutin) & (v < v_rated);
P(idx1) = P_rated * ((v(idx1)-v_cutin)/(v_rated-v_cutin)).^3;
idx2 = (v >= v_rated) & (v <= v_cutout);
P(idx2) = P_rated;
end
实测案例表明,忽略风速-功率转换的非线性会导致概率分布尾部误差放大3-5倍。建议在建模时加入湍流强度修正系数η:
matlab复制P_actual = η * wind_power(v,...); % η通常取0.92-0.97
光照强度分布呈现明显的"双峰"特性——晴天和阴雨天的辐照度差异显著。通过对比分析,Beta分布比正态分布更适合描述这种特性:
matlab复制alpha = 0.85; % 上午光照增长参数
beta = 1.2; % 下午衰减参数
I = betarnd(alpha,beta,[1,10000]); % 生成随机光照强度
histogram(I,'Normalization','pdf'); % 绘制概率分布
参数估计的黄金法则:
当需要同时考虑风电和光伏的互补特性时,可采用Copula函数连接边缘分布。这里给出Gaussian Copula的实现示例:
matlab复制rho = 0.35; % 风光出力相关系数
U = copularnd('Gaussian',rho,10000);
wind_p = wblinv(U(:,1),param(1),param(2));
solar_p = betainv(U(:,2),alpha,beta);
避坑指南:实际项目中发现,直接使用历史出力数据的联合分布比单独拟合风速/光照更准确,特别是在极端天气情况下。
建议采用面向对象编程构建可复用的模型:
matlab复制classdef RenewableModel
properties
wind_k, wind_c % Weibull参数
solar_alpha, solar_beta % Beta参数
end
methods
function obj = fitWind(obj, data) ... end
function obj = fitSolar(obj, data) ... end
function [Pwind, Psolar] = simulate(obj, n) ... end
end
end
某风电场实测与模拟数据对比:
| 风速区间(m/s) | 实测频率 | Weibull预测 | 相对误差 |
|---|---|---|---|
| 0-3 | 0.142 | 0.138 | 2.8% |
| 3-6 | 0.317 | 0.324 | 2.2% |
| 6-9 | 0.281 | 0.273 | 2.9% |
| >9 | 0.260 | 0.265 | 1.9% |
建议采用三步验证法:
matlab复制qqplot(data, wblrnd(param(1),param(2),size(data)))
matlab复制[h,p] = kstest(data,'CDF',wblcdf(data,param(1),param(2)))
matlab复制nll = -sum(log(wblpdf(data,param(1),param(2))));
bic = 2*nll + 2*log(length(data));
在最近参与的某200MW风光互补项目中,我们发现几个教科书上不会写的要点:
数据预处理陷阱:
参数更新策略:
matlab复制% 滑动窗口参数更新
window_size = 30; % 天
for i = 1:length(data)-window_size
current_data = data(i:i+window_size);
params(i,:) = wblfit(current_data);
end
这样能捕捉到季节特性变化,使全年预测误差降低6-8%。
混合分布改进:
在台风多发地区,建议采用混合Weibull分布:
matlab复制% 两成分混合模型
f_mix = @(x) p*wblpdf(x,k1,c1) + (1-p)*wblpdf(x,k2,c2);
这套方法已在三个省级电网得到验证,相比传统方法可将备用容量需求预测误差控制在7%以内。需要完整工程代码的朋友,可以参考文末GitHub仓库中的RenewablePowerSim工具箱。