bp神经网络数字识别matlab_MATLAB基于BP神经网络的光伏发电太阳辐照度预测

点击上方蓝字关注“公众号”

97d0b5800d581a1a1b2acaa5e3d91142.gif

MATLAB基于BP神经网络的光伏发电太阳辐照度预测

光伏发电功率主要受太阳辐照度影响,所以准确预测太阳辐照度对光伏功率预测十分重要。程序采用小波分解先对辐照度数据进行分解,然后再用bp神经网络对分解的辐照度数据分别预测,再组合作为最后的预测结果。

355fe38b30822e7cbd47d27a667ccf5a.gif

人工神经网络(Artificial Neural Network,缩写为ANN)预测技术能从数据样本中自动地学习以前的经验而无需反复查询和表述过程,并自动地逼近那些最佳表征样本数据规律的函数,而不论这些函数具有怎样的形式,其考虑的系统表现的函数形式越复杂,神经网络这种特性的作用就越明显,即具有以任意精度逼近复杂的非线性函数的特性。

f9dc7a7c45e1c3d5f74a4e89d3b76a87.png

227cd4b2017b4e6e48e22a2e2e05ffe1.gif 97741fd1d79509ad4ee9d4dd18df4460.png 25c876711a8f238ef95ccf9812b57a4b.png

01

仿真程序

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

6ac1b81279ec8de26d3e8aeaa50abc7a.gif

01

分解函数

%测试集输入和期望
%%
%利用小波对数据进行分解
%%分三层
[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

02


for i=1:N_test_input
    s2=irr_test_input(:,i)';
    [c2 l2]=wavedec(s2,n,'db3');
    for j=1:n
      ca2(j,:)=wrcoef('a',c2,l2,'db3',j);
      cd2(j,:)=wrcoef('d',c2,l2,'db3',j);
    end
    B{1,1}(:,i)=ca2(n,:)';
    for j=1:n
        B{1,j+1}(:,i)=cd2(j,:)';
    end
end
%% 进行训练和预测
for i=1:(n+1)
irr_train_input1=A{1,i}(:,1:400);
irr_train_target1=A_target{1,i}(:,1:400);
irr_test_input1=B{1,i}(:,18:27);
% irr_test_target1=B{1,i}(:,501:510);
%选连样本输入输出数据归一化
[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;

04

仿真结果图

4844d03684cc27f77dc047ae9d83adfa.png

f018d28cef5ee8c27fec1365c5e988c2.png

03d8531797159e862d45f3c136ffeb7d.png

f55a595fcf68110a5752b62a6173e825.gif

具体仿真程序链接,微信公众号回复【光伏】即可获得链接。

海客談瀛洲,煙濤微茫信難求;越人語天姥,雲霞明滅或可睹。天姥連天向天橫,勢拔五嶽掩赤城。天臺四萬八千丈,對此欲倒東南傾。我欲因之夢吳越,壹夜飛度鏡湖月。湖月照我影,送我至剡溪。謝公宿處今尚在,淥水蕩漾清猿啼。腳著謝公屐,身登青雲梯。半壁見海日,空中聞天雞。千巖萬轉路不定,迷花倚石忽已暝。熊咆龍吟殷巖泉,栗深林兮驚層巔。雲青青兮欲雨,水淡淡兮生煙。列缺霹靂,丘巒崩摧。洞天石扉,訇然中開。青冥浩蕩不見底,日月照耀金銀臺。霓為衣兮風為馬,雲之君兮紛紛而來下。虎鼓瑟兮鸞回車,仙之人兮列如麻。忽魂悸以魄動,恍驚起而長嗟。惟覺時之枕席,失向來之煙霞。世間行樂亦如此,古來萬事東流水。別君去兮何時還?且放白鹿青崖間。須行即騎訪名山。安能摧眉折腰事權貴,使我不得開心顏!未完待续

扫码关注

不迷路

1cc039ea476154720d24b9ac4769a743.gif

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值