⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bp.m

📁 BP神经网络用于负荷预测
💻 M
字号:
clear all
clc;
trainnum=12;
%训练数据(输入)
%用的是2008年1月份15,16,17号的负荷值和电价          po用来训练的负荷值   p1用来预测负荷值  t0用来训练的电价
p0=[29969 	29183 	28920 	29087 	29946 	32376 	36616 	38698 	38189 	37691 	37384 	37183 	37195 	37286 	37145 	37248 	38457 	41535 	41886 	41363 	40354 	38514 	35758 	35758 ;31376 	30557 	30196 	30170 	30932 	33330 	37361 	39319 	38756 	38173 	37766 	37250 	36674 	36346 	35897 	35816 	36945 	40256 	40836 	40419 	39624 	38023 	35455 	35455 ;31156 	30436 	30185 	30120 	30894 	33059 	37053 	39057 	38778 	38587 	38695 	38666 	38580 	38497 	38399 	38660 	39691 	41982 	42083 	41344 	40081 	37971 	34891 	34891 ];
p10=[31376 	30557 	30196 	30170 	30932 	33330 	37361 	39319 	38756 	38173 	37766 	37250 	36674 	36346 	35897 	35816 	36945 	40256 	40836 	40419 	39624 	38023 	35455 	35455;31156 	30436 	30185 	30120 	30894 	33059 	37053 	39057 	38778 	38587 	38695 	38666 	38580 	38497 	38399 	38660 	39691 	41982 	42083 	41344 	40081 	37971 	34891 	34891;31829 	30852 	30389 	30233 	30561 	31439 	32843 	34032 	35388 	35979 	35687 	34952 	34189 	33544 	33231 	33285 	34818 	37048 	37096 	36498 	35935 	34715 	32926 	32926 ];
t0=[46.57	42.06	40.46	41.11	46.09	66.76	100.91	88.73	81.57	76.09	79.45	71.05	63.88	60.27	56.39	52.78	66.28	92.62	96.5	83.21	75.23	64.56	48.5	44.32];
for tt=1:2;            %分两次训练

for i=1:3;             %每次分别取6*3个负荷p0,再取6个电价t0数据
    k=1;
    for j=(1+(tt-1)*trainnum):(trainnum*tt);
     p1(i,k)=p0(i,j);
     p2(i,k)=p10(i,j);
     t1(k)=t0(j);
     k=k+1;
    end;
end;

uu=max(max(p1));
p=p1./uu; %归一化处理
%训练数据(输出)

uu=max(t1);
t=t1./uu;%归一化处理
%%%----------------------------训练部分----------------------------------------
s1=5;%隐层的神经元数
[r,q]=size(p);[s2,q]=size(t);
w1=rand(s1,r);w2=rand(s2,s1);%权值矩阵W1的初始化; %权值矩阵W2的初始化
b1=zeros(s1,1);b2=zeros(s2,1);%b1,b2的初始化
max_epoch=10000;lr=0.01;err_goal=0.005;%训练的最大轮数; %学习因子; %误差允许
dw1=0;db1=0;dw2=0;db2=0;
for epoch=1:max_epoch
    A1=tansig(w1*p,b1);A2=purelin(w2*A1,b2);%隐层实际输出; %输出层实际输出
    E=t-A2;
    d2=deltalin(A2,E);%分别计算实际误差
    d1=deltatan(A1,d2,w2);
    [dw2,db2]=learnbpm(A1,d2,lr,0.5,dw2,db2);%得到权值增量
    [dw1,db1]=learnbpm(p,d1,lr,0.5,dw1,db1);
   w2=w2+dw2;b2=b2+db2;%修正权值和阈值
   w1=w1+dw1;b1=b1+db1;
    c=purelin(w2*tansig(w1*p,b1),b2);%输出层实际输出
    sse=sumsqr(t-c);%检验误差是否满足要求
    if sse<err_goal
        break;end
end
%-------------------------------训练结束-------------------------------------
%output 数组存放最后的预测结果
p3=p2./max(max(p2));%归一化处理
A1=tansig(w1*p3,b1);
A3=purelin(w2*A1,b2);%计算输出(归一化的值)
A3=A3*uu;
for i=1:trainnum;
    output(i+(tt-1)*trainnum)=A3(i);
end;
end;      %对应的是第9行的for

%----------------------------------------一以下是画图--------------------------
zs=[42.41	38.24	37.21	37.33	38.72	48.12	82.43	88.96	81.86	78.01	69.64	62.71	57.36	54.92	48.57	44.72	54.52	87.36	95.41	81.35	73.07	59.23	44.84	44.95];
x=1:1:24;
plot(x,output,'g:',x,zs,'b');
title('比较,绿色的是预测值,蓝色的是历史值');
xlabel('time');
ylabel('price');

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -