📄 jianmo.m
字号:
close all
clear
echo on
clc
%BP建模
%定义网络输入p1
%p1=[];
%期望输出t1
%t1=[];
load D9515a.txt; qq1=D9515a; qq1=abs(qq1);
load D9515ab.txt; qq2=D9515ab; qq2=abs(qq2);
load D9515b.txt; qq3=D9515b; qq3=abs(qq3);
load D9515bc.txt; qq4=D9515bc; qq4=abs(qq4);
load D9515c.txt; qq5=D9515c; qq5=abs(qq5);
%求平均值
%Q=k3950;
for i=1:50
q1(i)=mean(qq1(i,:));
q2(i)=mean(qq2(i,:));
q3(i)=mean(qq3(i,:));
q4(i)=mean(qq4(i,:));
q5(i)=mean(qq5(i,:));
end
nl=[q1 q2 q3 q4 q5];
figure(1)
plot(nl)
%训练数据
for i=1:40
for j=1:40
a1(j,:)=q1(j:9+j);%a1=a1';
a2(j,:)=q2(j:9+j);%a1=a1';
a3(j,:)=q3(j:9+j);%a1=a1';
a4(j,:)=q4(j:9+j);%a1=a1';
a5(j,:)=q5(j:9+j);%a1=a1';
b1(j)=q1(10+j);
b2(j)=q2(10+j);
b3(j)=q3(10+j);
b4(j)=q4(10+j);
b5(j)=q5(10+j);
end
end
%P=P';
%X=p(1,41:50);
P=[a1;a2;a3;a4];
T=[b1 b2 b3 b4];
%预测数据
A=[a5];
%实际预测结果
X=[b5];
p1=P';
t1=T;
p2=A';
t2=X;
%将输入数据归一化
p=p1;t=t1;
[pn,minp,maxp,tn,mint,maxt]=premnmx(p,t)
pause
clc
%设置网络隐单元的神经元数
n=13;
%建立相应的BP网络
net=newff(minmax(pn),[n,1],{'tansig','purelin'},'traingdm');
% 当前输入层权值和阈值
inputWeights=net.IW{1,1};
inputbias=net.b{1};
% 当前网络层权值和阈值
layerWeights=net.IW{1,1};
layerbias=net.b{2};
% 训练网络
net.trainParam.show=50;
net.trainParam.lr=0.01;%训练速度
net.trainParam.mc=0.9;
net.trainParam.epochs=5000;
net.trainParam.goal=0.015;
%调用TRAINGDM算法训练BP网络
net=train(net,pn,tn);
%对BP网络进行仿真
A=sim(net,pn);
E=A-tn;
M=sse(E)
N=mse(E)
%p2=[],预测数据;
p2=p2;
p2n=tramnmx(p2,minp,maxp);
a2n=sim(net,p2n);
a2=postmnmx(a2n,mint,maxt)
a2=abs(a2);
%将预测的图形和实际的图形显示并进行比较
%显示预测图形
figure(2)
plot(a2,'ro-')
hold on
%显示实际图形
%t2=[];
plot(t2,'g.-')
hold on
%计算仿真误差
E = t2 - a2
E=abs(E);
%plot(E,'bo-')
MSE=mse(E)
echo off
%设置坐标
%axis([0 40 0 10])
set(gca,'Xtick',0:2:40);%设置坐标
title('基于BP网络的故障预测');
xlabel('预测次数');
ylabel('预测值和实际值');
%text(35,7,'预测曲线(红)');
%text(35,8,'实际曲线(绿)');
pause
clc
%显示结果并进行比较
t2_a2=[t2;a2]'
%将预测结果和实际结果数据处理
%预测数据
for i=1:40
if a2(i)>1.9
a2(i)=1;
else if a2(i)<=1.9
a2(i)=0;
end
end
end
%实际数据
for i=1:40
if t2(i)>1.9
t2(i)=1;
else if t2(i)<=1.9
t2(i)=0;
end
end
end
%显示处理的结果
figure(3);
plot(a2,'r.')
hold on
plot(t2,'gO')
hold on
axis([0 40 -1 2]);
%计算预测比率
t2_a2=[a2;t2]
x=0;
for i=1:40
if a2(i)==t2(i)
x=x+1;
end
end
bl=x/40 %正确比率
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -