光伏发电功率主要受太阳辐照度影响,所以准确预测太阳辐照度对光伏功率预测十分重要。程序采用小波分解先对辐照度数据进行分解,然后再用bp神经网络对分解的辐照度数据分别预测,再组合作为最后的预测结果。
人工神经网络(Artificial Neural Network,缩写为ANN)预测技术能从数据样本中自动地学习以前的经验而无需反复查询和表述过程,并自动地逼近那些最佳表征样本数据规律的函数,而不论这些函数具有怎样的形式,其考虑的系统表现的函数形式越复杂,神经网络这种特性的作用就越明显,即具有以任意精度逼近复杂的非线性函数的特性。
仿真程序(部分)
clear all;
clc;
%载入辐照度数据
load irr-temp-data.mat
%提取每天8:00-18:00的辐照度数据
irr_train=trainirr(33:72,:);
irr_test=testirr(33:72,:);
%选择输入与期望
[M_train N_train]=size(irr_train);%训练集的行与列
[M_test N_test]=size(irr_test);%测试集的行与列
%
% %% 将前三天作为输入 后一天作为输出 重新构造训练集和测试集
%
% %训练集输入和期望
% for i=1:(N_train-3)
%
% irr_train_input(:,i)=[irr_train(:,i);irr_train(:,i+1);irr_train(:,i+2)];
% irr_train_target(:,i)=irr_train(:,i+3);
% end
%
% for i=1:(N_test-3)
% irr_test_input(:,i)=[irr_test(:,i);irr_test(:,i+1);irr_test(:,i+2)];
% irr_test_target(:,i)=irr_test(:,i+3);
% end
%% 将前一天数据作为输入 后一天作为输出个 构造训练集和测试集
%训练集输入和期望
irr_train_input=irr_train;
for i=1:(N_train-1)
irr_train_target(:,i)=irr_train(:,i+1);
end
%测试集输入和期望
irr_test_input=irr_test;
for i=1:(N_test-1)
irr_test_target(:,i)=irr_test(:,i+1);
end
分解函数
%测试集输入和期望
%%
%利用小波对数据进行分解
%%分三层
[M_train_input N_train_input]=size(irr_train_input);%训练集的行与列
[M_train_target N_train_target]=size(irr_train_target);%训练目标集的行与列
[M_test_input N_test_input]=size(irr_test_input);%测试集的行与列
[M_test_target N_test_target]=size(irr_test_target);%测试目标集的行与列
n=5;%设置分解层数
A=cell(1,n+1);
A_target=cell(1,n+1);
B=cell(1,n+1);
B_target=cell(1,n+1);
%% 训练输入集进行小波分解
for i=1:N_train_input
s=irr_train_input(:,i)';
[c l]=wavedec(s,n,'db3');
for j=1:n
ca(j,:)=wrcoef('a',c,l,'db3',j);
cd(j,:)=wrcoef('d',c,l,'db3',j);
end
A{1,1}(:,i)=ca(n,:)';
for j=1:n
A{1,j+1}(:,i)=cd(j,:)';
end
end
%% 训练目标集进行小波分解
for i=1:N_train_target
s1=irr_train_target(:,i)';
[c1 l1]=wavedec(s1,n,'db3');
for j=1:n
ca1(j,:)=wrcoef('a',c1,l1,'db3',j);
cd1(j,:)=wrcoef('d',c1,l1,'db3',j);
end
A_target{1,1}(:,i)=ca1(n,:)';
for j=1:n
A_target{1,j+1}(:,i)=cd1(j,:)';
end
end
%选连样本输入输出数据归一化
[inputn,inputps]=mapminmax(irr_train_input1);
[outputn,outputps]=mapminmax(irr_train_target1);
03
%% BP网络训练
% %初始化网络结构
net=newff(inputn,outputn,10);
net.trainParam.epochs=100;
net.trainParam.lr=0.05;
net.trainParam.goal=0.000004;
%网络训练
net=train(net,inputn,outputn);
%% BP网络预测
%预测数据归一化
inputn_test=mapminmax('apply',irr_test_input1,inputps);
%网络预测输出
an=sim(net,inputn_test);
%网络输出反归一化
BPoutput=mapminmax('reverse',an,outputps);
C{1,i}=BPoutput;
end
sum_predict=C{1,1};
for ii=1:n
sum_predict=sum_predict+C{1,ii+1};
end
sum_predict=sum_predict(:);
irr_test_target0=irr_test_target(:,18:27);
irr_test_target1=irr_test_target0(:);
%% 结果分析
figure(1)
plot(sum_predict,':og')
hold on
plot(irr_test_target1,'-*');
legend('预测输出','期望输出')
title('BP网络预测输出','fontsize',12)
ylabel('函数输出','fontsize',12)
xlabel('样本','fontsize',12)
%预测误差
error=sum_predict-irr_test_target1;
figure(2)
plot(error,'-*')
title('BP网络预测误差','fontsize',12)
ylabel('误差','fontsize',12)
xlabel('样本','fontsize',12)
figure(3)
plot((irr_test_target1-sum_predict)./sum_predict,'-*');
title('神经网络预测误差百分比')
nn=size(error,1);%预测点的个数
RMSE=sqrt(sum(error.^2)/nn) ;
MSE=sum(error.^2)/nn;
MAE=sum(abs(error))/nn;
MAPE=sum(abs(error./sum_predict))/nn;
源码链接:
基于BP神经网络的光伏发电太阳辐照度预测Matlab仿真源码.rar资源-CSDN文库