作业帮 > 综合 > 作业

用matlab神经网络进行需水量预测

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/13 04:21:32
用matlab神经网络进行需水量预测
有28年的数据6235 6897 7012 7023 7289 7896 7589 7986 7998 8012 8123 8456 8498 8654 8723 8923 10093 11626 11536 11276 9606 8769 8068 7541 9717 8886 9287 9710
需要用神经网络进行预测,进行拟合对比分析.因为没学过MATLAB对此一窍不通,任务又需要,所以请大侠帮忙,如何实现.
对比是与原来的这些数据对比
clear;
%用bp网络,首先对数据分组:
%假设从当年起后3年的需水量和前十年有关.即第十一,十二,十三年的需水量由第一年到第十年确定,第十二,十三,十四年的需水量由第二年到第十一年确定...
%则:输入量
p=[6235 6897 7012 7023 7289 7896 7589 7986 7998 8012;
6897 7012 7023 7289 7896 7589 7986 7998 8012 8123 ;
7012 7023 7289 7896 7589 7986 7998 8012 8123 8456;
7023 7289 7896 7589 7986 7998 8012 8123 8456 8498;
7289 7896 7589 7986 7998 8012 8123 8456 8498 8654;
7896 7589 7986 7998 8012 8123 8456 8498 8654 8723;
7589 7986 7998 8012 8123 8456 8498 8654 8723 8923;
7986 7998 8012 8123 8456 8498 8654 8723 8923 10093;
7998 8012 8123 8456 8498 8654 8723 8923 10093 11626;
8012 8123 8456 8498 8654 8723 8923 10093 11626 11536;
8123 8456 8498 8654 8723 8923 10093 11626 11536 11276;
8456 8498 8654 8723 8923 10093 11626 11536 11276 9606;
8498 8654 8723 8923 10093 11626 11536 11276 9606 8769 ;
8654 8723 8923 10093 11626 11536 11276 9606 8769 8068;
8723 8923 10093 11626 11536 11276 9606 8769 8068 7541;
8923 10093 11626 11536 11276 9606 8769 8068 7541 9717];
%对应输出量:
t=[8123 8456 8498;
8456 8498 8654;
8498 8654 8723;
8654 8723 8923;
8723 8923 10093;
8923 10093 11626;
10093 11626 11536;
11626 11536 11276 ;
11536 11276 9606;
11276 9606 8769;
9606 8769 8068;
8769 8068 7541;
8068 7541 9717;
7541 9717 8886;
9717 8886 9287;
8886 9287 9710;];
%对数据进行归一化(即缩放到0,1之间),P,T分别为归一化后的输入量和输出量
for i=1:16
P(i,:)=(p(i,:)-min(p(i,:)))/(max(p(i,:))-min(p(i,:)));
end
for i=1:16
T(i,:)=(t(i,:)-min(t(i,:)))/(max(t(i,:))-min(t(i,:)));
end
%选取前14组数据训练网络,第15,16组用来测试训练好的网络.
PP=[P(1,:);P(2,:);P(3,:); P(4,:);P(5,:);P(6,:);P(7,:);
P(8,:);P(9,:);P(10,:); P(11,:);P(12,:);P(13,:);P(14,:)];
Ptest=[P(15,:);P(16,:)]';
TT=[T(1,:);T(2,:);T(3,:); T(4,:);T(5,:);T(6,:);T(7,:);
T(8,:);T(9,:);T(10,:); T(11,:);T(12,:);T(13,:);T(14,:)];
Ttest=[T(15,:);T(16,:)]'
PP=PP'
TT=TT'
%s是隐层单元数,用for循环试试3种隐层
s=[10,15,18];
res=1:3;
for i=1:3
net=newff(minmax(PP),[s(i),3],{'tansig','logsig'},'trainlm');
net.trainParam.epochs=500;
net.trainParam.goal=0.0001;
net=train(net,PP,TT);
y=sim(net,PP);
error=y-TT;
res(i)=norm(error);
end
%用Ptest测试训练好的网络效果.
Y=sim(net,Ptest)
Ttest =
1.0000 0
0 0.4867
0.4826 1.0000
Y =
0.0000 0.0000
0.9974 0.9990
0.9985 1.0000
对比Ttest和Y,如果相似,则预测效果好,呃,很明显,我这个网络效果很糟糕...你将数据重新分组,数据分组有两个参数,即今年之前m年影响今年之后N年.像上面我是之前10年决定之后3年,看来不行...