%PA 6月6:0:0 计算的MATLAB 程序如下:BP神经网络预测 % V7 Z1 N8 [# q- K%6月6位于第28行 2 ]$ E8 r) n% A- A2 |7 z: g5 sclc,clear- J( U7 K+ m8 Q. b3 n, D' X
load ('data.mat')%原始数据以列向量的方式存放在workplace文件中1 @' `" z3 ?" V6 }2 _# i' ~& Q! U
PA=PA(2:29,:);9 v' L; ?- K1 ^4 h0 ?8 Z9 s- Y! T
%数据的标准化 ; u! }8 r' B4 k* @4 ^$ T+ f! C% k* }! fN=size(PA); ! {* { P. P; l6 Pfor j=1:N(1,2)3 {) v, ~* t# s7 t0 q! E5 c" |
PAHminmax=minmax(PA(:,j)'); * \. D9 I2 ~5 O# Y6 s: A for i=1:N(1,1) & O; R$ T+ g9 ~9 N# r PA(i,j)=(PA(i,j)-PAHminmax(1,1))/(PAHminmax(1,2)-PAHminmax(1,1)); p; R+ N" _ W& @, Q. ~ end # A, E8 ]0 W/ \# k* d! Q1 I; cend : Q' V0 O9 g9 e4 B4 y( {8 p6 x%以每天的从0时计数起,每隔十五分钟作为输入* D) h: y: q+ d
P=PA(7:27,:);* Z- L8 Q' |3 n! J3 {5 D* U
%以6月6的间隔十五分钟的发电量作为目标向量. ?0 ^4 a. W; C
T=PA(28,:);6 {! T0 A0 ?$ C7 e8 o) C3 Y
%创建一个BP神经网络,每一个输入向量的取值范围为[0 ,1],隐含层有22个神经元,- B: g8 |1 Y G5 x$ W! a
%输出层有一个神经元,隐含层的激活函数为tansig,输出层的激活函数为%logsig, ( s5 R6 s, ]8 a$ s%训练函数为梯度下降函数,即标准学习算法 ) x' E8 ?1 w, t2 \# Dfor i=1:21 . h0 ~2 d* }0 X a(i,1)=0; ; p3 x! }8 _: [( D" d$ h a(i,2)=1; y7 ]3 ~* P2 _& O8 O
end7 ^$ o0 H* X, ^' z) |" v" Y& Q
net=newff(a,[21,1],{'tansig','logsig'},'traingd');5 j, {8 ]$ W' Z7 u ]1 Z2 l: z
net.trainParam.epochs=30000;9 L3 Y: i" E7 \, O Q1 i
net.trainParam.goal=0.01; + t: [% Y4 T" s, ^5 z: _( k%设置学习速率为0.1. g/ ~( ?% \8 ~! `2 O
LP.lr=0.1;& Q+ Z+ H5 X( |
%训练网络 0 o; @' h! H2 E% J# Inet=train(net,P,T);3 h* U8 r, _/ J4 o1 j
%预测6月6的发电量数据 " ~3 o' c! o3 lT1=sim(net,P);%预测值 ; F$ i' Q; K& H( [' n) J%PA.6月6日发电量真实值 ; u9 E* f; F( M' ~2 OT0=PA(28,:);6 L1 g7 y) z( Y8 V: j
%预测值与实际值的误差0 H0 K$ a' X; M9 p, F# {3 r3 @
for i=1:N(1,2)5 Q( ]; Q7 q r: H3 b: R
error(1,i)=T1(1,i)-T0(1,i);- W& M2 M+ k. y7 A
end + \* B% t/ L3 [: D. v%绘制误差图# r& U: I( g- V% k/ k
figure(1)& G5 E# U" v: L* u+ n6 j2 D. n
plot(1:N(1,2),error(1,1:N(1,2)),'-*')) V2 U" B! o, {5 \
grid on9 X4 o& `4 v6 A! ~% } q" |, n
xlabel('时点x'),ylabel('发电功率误差y');4 v" [2 R! y- I, W7 w& D( K2 k% x
title('PA6.6.0.0-6.6.23.45发电功率误差图像')2 |+ ^& `: ?3 g$ ~( ^: z) e) w$ _
%绘制实时函数图; F d9 @) Y4 O1 F6 C
figure(2): ?7 t8 P( ]3 T
plot(1:N(1,2),T0(1,:),1:N(1,2),T1(1,:),'r')9 \' n+ N$ c) W ~; Y$ r# F
grid on + j2 `# D6 e. ?" g w2 Flegend('实际值','预测值',2)7 n2 F' v" z& \- ?1 s" T
xlabel('时点x'),ylabel('发电功率y');1 ^8 z& _; F' y! s- s: b; v: m
title('PA6.6.0.0-6.6.23.45发电功率实时函数图像'): K9 c7 a5 I' o$ W3 ~6 j
web('http://www.ilovematlab.cn/forum-238-1.html','-browser')8 P: ?- j6 Q, `5 ~
2 h! t: u) Z! P; D
7 u7 e, o: e+ I8 N' F1 K3 M: J Y( N, V/ D) s
. g0 N2 D, J8 P+ E& p+ ^
一本书关于预测发电量的BP的程序。我稍微有点纳闷,既然你已经知道了6月6日的实际值,并且都拿相应的数据来作目标向量了,还利用神经网络来预测6月6日的发电量,意义何在?1 x" A2 ]$ W1 P$ y( J. P
) o; l3 c) I4 Q