BP神经网络的简单应用

%%
%对程序的说明%
%做生成数(使用0.1做因子),之后13年的数据按统计方法标准化后输入,训练,仿真,对比结果。这个过程相当于插值计算%
%输出结果请最后五句r1,r,l,plotyy(k,to,k,t),plotyy(k,a,k,f)%

%这样做的缺点是不能检验预测效果的好坏,还有一点我对网络初始化的过程没有把握%

clear
% 数据输入
inv=[189.6  244.2  328.5  405.3  487.5  568.6  669.9  801.6  785.9  859.2  979.7  1086.3  1241];
d1=[15.3  16.6  17.2  22.8  37.6  30.8  38.9  50.8  58.2  41.2  55.8  71.7  82.3];
d2=[117.7  140.7  177.8  209.8  247.7  290.8  343.2  337.1  308.1  353.6  350.1  367.2  415.7];
d3=[56.6  86.9  133.5  172.6  202.2  247  287.8  413.7  419.6  464.4  573.8  647.4  742.1];
f=[822.3  959.7  1198.4  1607.5  1997.6  2380.9  2683.8  2798.9  2897.4  3253  3561  3882 4433];
k=1991:1:2003;
% 使用13年数据训练得到网络仿真计算相对误差
%对原始数据初始化的过程为t(1)=f(1);  t(i)=t(i-1)+0.1*f(i)(i=2:13)
% 累加 p1(1)=d1(1);for i=2:13 p1(i)=0.1*d1(i)+p1(i-1);end %
% 累减 a(1)=v(1);for i=2:13 a(i)=(v(i)-v(i-1))*10;end %
% 先赋予0值
p1=zeros(1,13);p2=zeros(1,13);p3=zeros(1,13);t=zeros(1,13);
p1(1)=d1(1);for i=2:13 p1(i)=0.*d1(i)+p1(i-1);end
p2(1)=d2(1);for i=2:13 p2(i)=0.1*d2(i)+p2(i-1);end
p3(1)=d3(1);for i=2:13 p3(i)=0.1*d3(i)+p3(i-1);end
t(1)=f(1);for i=2:13 t(i)=0.1*f(i)+t(i-1);end
b=[p1;p2;p3;t]';
p=[(p1-mean(p1))./std(p1);(p2-mean(p2))./std(p2);(p3-mean(p3))./std(p3)];
tt=(t- mean(t))./std(t);%数据标准化处理,标准化为网络输入p,期望输出tt

%建立网络并训练
net=newff(minmax(p),[4,1],{'tansig','purelin'},'trainlm');
net.iw{1,1}=zeros(size(net.iw{1,1}))+0.5;
net.lw{2,1}=zeros(size(net.lw{2,1}))+0.75;
net.b{1,1}=zeros(size(net.b{1,1}))+0.5;
net.b{2,1}=zeros(size(net.b{2,1}));
net.trainParam.epochs=3000;
net.trainParam.goal =0.000005;
net=train(net,p,tt);
%网络仿真得到网络输出,并计算误差
tt1=sim(net,p);
to=tt1.*std(t)+mean(t);%利用标准化的逆变换得到t1的近似值to
a=zeros(1,13);a(1)=to(1);
for i=2:13 a(i)=(to(i)-to(i-1))*10; end %累减得到近似的实际产值a
r_net=(tt1-tt)./tt;%网络相对误差
r_add=(to-t)./t;%总产值累加数相对误差
r_real=(a-f)./f;%实际总产值相对误差

%输出结果%
r1=[r_net;r_add;r_real]'%网络相对误差/累加数相对误差/实际值相对误差
r=r_real./r_add %误差放大倍数
l=[to;t;to-t;a;f;a-f]'%累加数计算值/累加数/绝对误差//计算的实际值/实际值/绝对误差
plotyy(k,to,k,t);%总产值的仿真累加值(to)随时间变化曲线与实际累加值(t)随时间变化曲线
%在这里设置断点,以查看这两条曲线%
plotyy(k,a,k,f);%总产值的仿真值(a)随时间变化曲线与实际值(f)随时间变化曲线

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fpga和matlab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值