⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 part.m

📁 基于BP网络预测的matlab程序
💻 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 + -