📄 part.m
字号:
clear
%数据输入%
%%数据输入1:投资inv(总量),d1(第一产业),d2(第二产业),d3(第三产业);总产值f
%这里的数据输入格式需要在考虑一下
data=[189.6,244.2,328.5,405.3,487.5,568.6,669.9,801.6,859.2,979.7,1086.3, ...
1241;15.3,16.6,17.2,22.8,37.6,30.8,38.9,50.8,41.2,55.8,71.7,83.2; ...
117.7,140.7,177.8,209.8,247.7,290.8,343.2,337.1,353.6,350.1,367.2,415.7; ...
56.6,86.9,133.5,172.6,202.2,247,287.8,413.7,464.4,573.8,647.4,742.1; ...
822.3,959.7,1198.4,1607.5,1997.6,2380.9,2683.8,2798.9,3253,3561,3882,4433];
%%%数据输入2:网络有关参数
EPOCHS=10000;
GOAL =0.000005;
%数据输出disp(f;fy) 用来显示实际产值f与仿真产值fy
% 及disp(error) 用来显示总产值误差
%图像:投资效益图(实际与仿真值比较)
%数据标准化处理,标准化为网络输入p,期望输出t
p=[(d1-mean(d1))./std(d1);(d2-mean(d2))./std(d2);(d3-mean(d3))./std(d3)];
t=(f- mean(f))./std(f);
%建立bp神经网络,并训练,仿真
%使用原始数据标准化之后建立网络net,隐含层神经元自动选择最好的,输入投资(d1,d2,d3),
%输出为t
s=3:8;%s 为常向量,表示神经元的个数
res=zeros(size(s));%res将要存储误差向量,这里先置零
for i=1:length(s)
net=newff(minmax(p),[s(i),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=EPOCHS;
net.trainParam.goal =GOAL;
net=train(net,p,t);
y=sim(net,p);
error=(y.*std(f)+mean(f)-f)./f;
res(i)=norm(error);
end
number=find(res==min(res));%number为使得误差最小的隐层神经元个数
if(length(number)>1) no=number(1);
else no=number;
end
clear error,res
%选定隐层神经元数目后,建立网络,训练仿真。
net=newff(minmax(p),[no,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=EPOCHS;
net.trainParam.goal =GOAL;
net=train(net,p,t);
y=sim(net,p);
error=(y.*std(f)+mean(f)-f)./f;%error为网络的误差向量
r=norm(error);%r为网络的整体误差
save net %保存最好的网络
fy=y.*std(f)+mean(f);
%下面是图像显示与结果输出
plot(inv,f,'rx-',inv,fy,'go:')%绘制投资总量与实际产值,投资总量与仿真的产值图像,
%红色表示实际图像,绿色表示仿真图像
xlabel('投资总量')
ylabel('实际产值与仿真产值')
title('投资效益图(实际与仿真值比较)')
out1=zeros(2,length(f)); %为输出变量分配空间
out2=zeros(length(error)); %为输出变量分配空间
out3=zeros(length(res(no))); %为输出变量分配空间
out1=[f;fy] %显示实际产值f与仿真产值fy
out2=error
out3=res(no) %显示总产值误差向量二范数
print( gcf, '-djpeg', 'c:\Test1') %在c:\下保存名为Test1的图像
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -