bp_year.m

来自「用BP算法做的对流量进行预测的程序」· M 代码 · 共 53 行

M
53
字号
function [DataFore,DataReal,error]=BP_year(year,num,n)
% bp神经网络年径流预报
% year   待预报年
% num    历史样本容量大小
% n      隐含层神经元个数

if (year-num-1)<1984
    input('历史样本容量过大,请减小样本长度!');
    return
end

load D2
load Qx
%取数据模块,以年径流量为单位,包括样本输入、输出数据,其中训练样本容量为num
DataInput=[];DataRain=[];DataFlow=[];DataTarget=[];

for i=1:num
    sumRain=sum(D2(find(D2(:,2)==(year-num-2+i)),5));
    DataRain=[DataRain,sumRain];   %取预报因子降雨样本

    sumFlow=sum(Qx(find(Qx(:,2)==(year-num-2+i)),5));
    DataFlow=[DataFlow,sumFlow];   %取预报因子流量样本
end
DataInput=[DataRain;DataFlow];

for j=1:num
    test_sumFlow=sum(Qx(find(Qx(:,2)==(year-num-1+j)),5));
    DataTarget=[DataTarget,test_sumFlow];
end


%训练网络    
net=newff(minmax(DataInput),[n,1],{'logsig','purelin'});
net.IW{1,1}=ones(n,2)/10;
net.b{1}=ones(n,1)/10;
net.LW{2,1}=ones(1,n)/10;
net.b{2}=1/10;

net.trainParam.show=100;
net.trainParam.lr=0.0001;
net.trainParam.epochs=50;
net.trainParam.goal=0.1;
net=train(net,DataInput,DataTarget);

DataTest=[];
DataTest=[sum(D2(find(D2(:,2)==(year-1)),5));sum(Qx(find(Qx(:,2)==(year-1)),5))];

DataFore=sim(net,DataTest)
DataReal=sum(Qx(find(Qx(:,2)==year),5))
error=abs(DataFore-DataReal)/DataReal


⌨️ 快捷键说明

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