MATLAB基于BP神经网络的光伏发电太阳辐照度预测(源码链接在文末)

光伏发电功率主要受太阳辐照度影响,所以准确预测太阳辐照度对光伏功率预测十分重要。程序采用小波分解先对辐照度数据进行分解,然后再用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文库

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HappyGirl快乐女孩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值