设计要求

已知地区 1、地区 2 从 2009 年 1 月 1 日至 2015 年 1 月 10 日的 电力负荷数据(每 15min一个采样点,每日 96 点,量纲为MW)以及 2012 年 1 月 1 日至 2015 年 1 月 17 日的气象因素数据(日最高温度、日最低温度、日平均温度、日相对湿度以及日降雨量),详见附件。
利用MATLAB进行分析建模,完成以下任务:
(1)请分析两个地区 2014 年全年负荷数据,统计两地区全年的日最高负荷、日最低负荷、日峰谷差、日负荷率指标的分布情况,并绘制两地区 2014 年全年的负荷持续曲线; 结合上述结果,分析两地区负荷变化的主要差异;初步预判哪个地区的负荷可以获得更准确的预测结果,说明你的理由。
(2)根据 2012-1-1 至 2014-12-31 的数据,分别对日最高负荷、日最低负荷、日平均负荷与各气象因素的关系进行分析,在各种气象因素中,你优先推荐哪个(或哪几个)气象因素来提高负荷预测精度?简要说明理由。
(3)根据已知负荷数据与选取的气象因素数据以及已获得 2015年1月4日至10日的气象因素数据,构建预测模型,对两个地区 2015 年1月4日至10日共7天的电力负荷进行预测。

建模作图

基于 matlab r2018b

两个地区的负荷曲线

导入数据

从首页中导入数据到 matlab 中,注意:数据类型需要更换为数值矩阵,方便后继的操作。

导入的数据在工作区,可以进行重命名、查看数据等操作。

第一题是最简单的作图题,解法基本相同,但作图思路有许多种:

将导入的数据转置后,对做图所需变量赋值:

1
2
3
4
5
A114=a114';
y1=max(A114);
y2=min(A114);
y3=max(A114)-min(A114);
y4=mean(A114)./max(A114);

作图

作图思路:将一个地区的日最高负荷、日最低负荷、日峰谷差结合在一张图上,将两个地区的负荷率放在同一张图上,方便对比:

1
2
3
4
5
plot(x,y1,'r-',x,y2,'b-',x,y3,'g-')
xlabel('时间/天')
ylabel('负荷/MW')
title('地区一2014年的日最高负荷、日最低负荷、日峰谷差')
legend('日最高负荷','日最低负荷','日峰谷差')
1
2
3
4
5
plot(x,y4,'r-',x,y8,'b-')
xlabel('时间/天')
ylabel('负荷率')
title('两地区2014年的日负荷率')
legend('地区一日负荷率','地区二日负荷率')

结果如图:

结果分析

电网负荷率与系统有功负荷高峰低谷有关。电网负荷率高表明该地区负荷峰谷差较小,负荷比较平均,电网负荷率低说明该地区峰谷差异较大,需要削峰填谷,使各时段负荷变化减小。

由两地区负荷率对比可看出:地区二负荷率整体较地区一高,且波动比较小,即地区二负荷峰谷差较小,负荷比较平均。因此初步判断地区二的负荷可以获得更准确的预测结果。

两个地区的年负荷持续曲线

年负荷持续曲线是根据一年8760小时的各个负荷大小的累计持续时间排列出来的曲线称为持续负荷曲线。

数据处理

因提供的数据是15min采样一次,年负荷持续曲线需要的是1小时的负荷,所以需对数据进行处理(即将一个小时4个点的负荷平均得到该时的负荷并保存在一阶矩阵中):

1
2
3
4
5
6
7
8
x=1:1:8760
Aw1=A114(:)
nian1=zeros(1,8760);
nian2=zeros(1,8760);
for i=1:1:8760
nian1(1,i)=(sum(Aw1(4*i-3:4*i)))/4;
end
nian2=sort(nian1,'descend'); % 对nian1倒序

地区二同理

作图

将两个地区的年负荷持续曲线放在一张图上,方便对比:

1
2
3
4
5
6
7
y1=nian2;
y2=nian4;
plot(x,y1,'r-',x,y2,'b-')
xlabel('时间/小时')
ylabel('负荷/MW')
title('两地2014年全年的年负荷持续曲线')
legend('地区一年负荷持续曲线','地区二年负荷持续曲线')

结果如图(负荷率越接近1越好):

初步判断地区二的负荷数据相比于地区一更加稳定,可以获得更准确的预测结果。

多个变量与因变量间的关系判断

绘制气象图

下面对日最高负荷、日最低负荷、日平均负荷与各种气象因素的关系进行分析:
导入数据 20120101 - 20141231 的最高温度、最低温度、平均温度、相对湿度、降雨量的数据,生成矩阵,对温度分布图进行绘制:

1
2
3
4
5
6
7
8
x=1:1:1096;  
% 转置,不转置也可,后面要用列进行计算
A1w=a1w';
y1=A1w(1,:);
y2=A1w(2,:);
y3=A1w(3,:);
y4=A1w(4,:);
y5=A1w(5,:);

作图:

1
2
3
4
5
6
7
subplot(2,2,1)
plot(x,y1,'r-',x,y2,'b-',x,y3,'g-')
xlabel('时间/天')
ylabel('温度/℃')
title('地区一的日最高温度、日最低温度、日平均温度')
legend('日最高温度','日最低温度','日平均温度')

绘制气象图,地区二同理;

可以观察到最高温度、最低温度、平均温度呈现较为明显的峰谷期与周期性,其趋势与地区负荷趋势相似。

多因素影响的分析判断

下面对几个因素做分析判断:
首先对变量赋值:

1
2
3
4
5
6
7
8
% 需要转置
x1=A1w(1,:)';
x2=A1w(2,:)';
x3=A1w(3,:)';
x4=A1w(4,:)';
x5=A1w(5,:)';
% 因变量
y=mean(A112to14)';

相关系数

相关系数是研究变量之间线性相关程度的量
0.5-0.8为显著相关,0.8-1为高度相关
在 matlab 中可直接用 corr 函数计算:

[r,p]=corr(y,x1)

地区一所有因子与负荷间的相关系数如下:

相关系数 日最高负荷 日最低负荷 日平均负荷
最高温度 0.5843 0.6420 0.6079
最低温度 0.6146 0.6739 0.6385
平均温度 0.6149 0.6743 0.6392
相对湿度 0.1111 0.1172 0.1096
降雨量 0.0736 0.0822 0.0711

注意数据不得有空(即NaN),可以有0,否则算出来的相关系数会出现 NaN,所以需对异常数据进行预处理。
由上表可以看出:平均温度,最低温度,最高温度均与负荷有明显的相关关系。

线性回归分析

线性回归方程是利用最小二乘函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析
在 matlab 中,可使用 regress 函数计算:

1
2
3
4
5
6
7
8
9
10
11
X=[ones(size(x1)),x1];
[b,bint,r,rint,stats]=regress(y,X);
b,stats(1) % 复相关系数
stats(3) % 对应于所得F统计量的概率P
z=b(1)+b(2)*x1;
figure;
plot(x1,y,'b.',x1,z,'r-');
title('温度散点图');
figure;
rcoplot(r,rint); % 残差图绘制
title('残差图');

得到结果如下:
b1 = 1.0e+03 *3.1559
b2 = 1.0e+03 *0.1424
stats(1) = 0.3696
stats(3) = 9.8269e-112
即 p = 9.8269e-112
当 α ≤ p 时,线性方程有显著意义,当 α > p ,线性方程无显著意义,显然,方程无显著意义[doge]。

主成分分析法

不会

有兴趣的可以试试

什么是主成分分析法

结论

通过上述几个方法可以初步判断:日最高温度、日最低温度、日平均温度与负荷有比较显著关系,下面选取日平均温度进行神经网络预测。


数据异常处理

发现异常

在前面作图中会发现:

部分负荷和气象数据出现较为明显的异常情况:

由上图得:负荷与温度数据有缺失与离群情况。

matlab r2019b 版本中编辑器自带数据缺失与离群时的处理功能
详见下链:

https://ww2.mathworks.cn/help/matlab/preprocessing-data.html?s_tid=CRUX_lftnav

那么不是 r2019b 以上的版本该怎么办呢?

买个正版就可以免费升级啦

那如果碰巧因为网络原因升级不了版本,也可以用 matlab 相关函数实现同样的功能(mathworks网站挺好用的,可以收藏):

缺失值可使用 fillmissing 函数,将缺失数值的数据运用函数:

a1w=fillmissing(a1w,'pchip');   

关于插值:

LAGRANGE插值是基础,分段插值解决高次 LAGRANGE 插值的抖动问题但分段处不连续,常用3次样条插值曲线2阶连续光滑性好

数据替换方法与上面 fillmissing 函数基本一致,见上表即可。

数据预处理后记得保存,这样下次打开就不需要在处理了。


BP神经网络预测

负荷预测是电力系统调度、实时控制、运行计划和发展规划的前提,是一个电网调度部门和规划部门所必须具有的基本信息。

选取一个因素对负荷进行神经网络预测

根据上述判断,可以选取日平均温度来进行训练;

导入必要数据:

1
2
3
4
5
6
P1=A1w(3,1006:1096);
T1=A112to14(:,1006:1096);
A1ws=a1ws';
A1tt=a1tt';
P2=A1ws(3,:);
T2=A1tt;

得到 P1、P2、T1、T2 。

训练数据归一化

1
2
[inputn,inputps]=mapminmax(P1);
[outputn,outputps]=mapminmax(T1);

BP神经网络构建

迭代次数100,学习率0.1,目标0.0004:

1
2
3
4
5
net=newff(inputn,outputn,10); % BP神经网络构建
net.trainParam.epochs=100; % 迭代次数
net.trainParam.lr=0.1; % 学习率
net.trainParam.goal=0.0004; % 目标
net=train(net,inputn,outputn);%BP神经网络训练

预测输出

an=sim(net,P2);

误差

error=abs(BPoutput-T2);

地区一预测输出和预测误差图

由上图可得

除去前100个测试样本,其余绝大部分预测误差在 ±8% 以内,预测结果较为符合。

地区二预测输出和预测误差图

同上,对地区二进行神经网络学习:

得到预测输出和预测误差图

可得

地区二基本所有样本误差在 ±8% 内,且大部分样本预测误差在 ±6% 以内。

由上述预测结果与分析可得,地区二的神经网络预测可以获得更准确的预测结果。

基于地区二对其他气象因素进行预测分析

单一因素对地区二负荷的影响分析

日最高温度:

日最低温度:

相对湿度:

降雨量:

由上可知:单一因素中,日最高温度所得误差较日最低温度、日平均温度更小,且预测结果相对集中;对于相对湿度和降雨量,两者的误差均偏向正误差,且两者相较于三个温度的预测结果而言,误差值较大。该结果与前面相关系数得到结果一致。

多个因素组合对地区二负荷的影响分析

多次分析后可得:

由两个因素影响时,最高温度+平均温度组合与最高温度+相对湿度组合预测误差范围最小,均为-0.08~0.09。

三个因素影响时,平均温度+相对湿度+降雨量组合预测误差范围最小,为-0.08~0.08。

五个因素同时作用并没有明显降低误差,因此并不是影响因素越多预测越精确。

下附最高温度+相对湿度组合的预测误差图:

心得体会

  • 人与动物最大的差别,就是人会使用工具;我与动物最大的差别,就是我虽然不会使用工具,但我会传承前辈的经验。