clear
clc
load x.txt%将往年的数据存放在txt文本中(这个txt文本里面是四样数据再加上年份列,共20行5列)
x=x';
p=x(1:3,:);
t=x(4,:);%读取数据
n=length(t);%样本长度
times=10;%模拟次数
for k=1:times
[pn,input_str]=mapminmax(p); %数据归一化
[tn,output_str]=mapminmax(t);
net=newff(minmax(pn),[10,1],{'logsig','purelin'},'trainlm'); %形成网络
inputWeights=net.IW{1,1};% 当前输入层权值和阈值
inputbias=net.b{1};
layerWeights=net.LW{2,1}; % 当前网络层权值和阈值
layerbias=net.b{2};
%设置网络参数
net.trainParam.show = 10; %显示训练迭代过程(缺省25)
net.trainParam.lr = 0.01; %学习率(缺省0.01)
net.trainParam.mc = 0.9; %动量因子(缺省0.9)
net.trainParam.epochs = 10000; %最大的训练次数
net.trainParam.goal = 0.001; %训练目的精度
[net,tr]=train(net,pn,tn); %开始训练网络
an=sim(net,pn);
a=mapminmax('reverse',an,output_str); %反归一化
for j=1:n
err(j)=abs(t(j)-a(j))/a(j); %将模拟数据与原有数据进行误差计算
%误差计算
end
%汇率没有改变时,未来三年的预测数据
pnew=[1008115.8 1098495.4 1190375.1
6.99 7.43 8.04
31310.28 31428.76 30891.23];
pnewn=mapminmax('apply',pnew,input_str);
anewn=sim(net,pnewn);
anew=mapminmax('reverse',anewn,output_str);
%汇率改变时,未来三年的预测数据
pnew2=[1008115.8 1098495.4 1190375.1
6.99 7.43 8.04
31310.28*1.05 31428.76*1.05 30891.23*1.05];
pnewn2=mapminmax('apply',pnew2,input_str);
anewn2=sim(net,pnewn2);
anew2=mapminmax('reverse',anewn2,output_str);
yuce(k,:)=anew;
yuce2(k,:)=anew2;%将模拟数据存取
err1(k,:)=err;%计算误差
continue;
end
%误差数据
ave_err=mean(err1);
all_ave_err=mean(ave_err);
ave_yuce=mean(yuce);
ave_yuce2=mean(yuce2);
delta=(ave_yuce2-ave_yuce)./ave_yuce;
ave_delta=mean(delta);
%画图
x=1999:2018;
x2=2019:2021;
plot(x,t,'o',x,a,'-',x2,ave_yuce,'*')%显示这一行的plot中向量长度不同
legend('样本点','以往预测值','未来预测值','Location','SouthEast')
xlabel('年份');ylabel('亿元');
title('过去19年进出口总额对比图及未来几年预测数据点');
2020-2-27 11:27 上传