%% 测试1
clear all;
close all; %清除图片
clc; %清屏
%%___p为输入量
P=[-1:0.05:1];
T=sin(2*pi*P)+0.1*randn(size(P));
figure
hold on
% plot(P,T,'+')
% plot(P,sin(2*pi*P),':')
net1=newff(minmax(P),[20,1],{'tansig','tansig'})
net1.trainFcn='trainbr';
net1.trainParam.show=50;
net1.trainParam.lt=0.001;
net1.trainParam.epochs=1000;
net1.trainParam.goal=1e-3;
[net1,tr]=train(net1,P,T);
A=sim(net1,P);
e=T-A;
MSE=mse(e);
plot(P,A,P,T,'+',P,sin(2*pi*P))
help neural
%% 测试2
X=-1:0.1:1;
T=sin(pi*X);%提供训练集和目标值
plot(X,T,'+');%建立网络,并得权值和偏值
[R,N]=size(X);
[S2,N]=size(T);
S1=5;
[W1,b1,W2,b2]=init(X,S1,'tansig',S2,'purelin');
[y1,y2]=simuff(X,W1,b1,'tansig',W2,b2,'purelin');%利用不含噪声的理想输入数据训练网络
disp_freq=10;%显示间隔
max_epoch=8000;%训练时间
err_goal=0.02;%训练目标误差
lr=0.01;%学习速率
tp=[disp_freq max_epoch err_goal lr];
[W1,b1,W2,b2,te,tr]=trainbp(W1,b1,'tansig',W2,b2,'purelin',X,T,tp);
[y1,y22]=simuff(X,W1,b1,'tansig',W2,b2,'purelin');
plot(X,T,'-',X,y21,'--',X,y22,'o')
X1=0.5;
y2=simuff(X1,W1,b1,'tansig',W2,b2,'purelin')
help init
%% 坡道与质量都识别————使用内置的归一化函数————%%%
p=[speed1.signals.values';acc1.signals.values';Fair1.signals.values';Ft1.signals.values'];
t=[m1.signals.values';slope1.signals.values'];
[P,minp,maxp,T,mint,maxt]=premnmx(p,t);
net=newff(minmax(P),[9,2],{'tansig','purelin'},'traingdx');
net.trainParam.show=50;
net.trainParam.lt=0.005;
net.trainParam.epochs=3000;
net.trainParam.goal=1e-3;
[net,tr]=train(net,P,T);
A=sim(net,P);
a=postmnmx(A,mint,maxt);
newk=a(1,:);
newh=a(2,:);
x=1:20176;
figure
plot(x,newk,x,m1.signals.values');
legend('网络输出客运量','实际输出');
figure
plot(x,newh,x,slope1.signals.values);
legend('网络输出货运量','实际输出');
%% 坡道与质量都识别---使用自定义的归一化函数————%%%
clear all;
close all;
clc;
% sqrs=[20.55 22.44 25.37 27.13 29.45 30.10 30.96 34.06 36.42 38.09 39.13 39.99 41.93 44.59 47.30 52.89 55.73 56.76 59.17 60.63];
% sqjdcs=[0.6 0.75 0.85 0.9 1.05 1.35 1.45 1.6 1.7 1.85 2.15 2.2 2.25 2.35 2.5 2.6 2.7 2.85 2.95 3.1];
% sqglmj=[0.09 0.11 0.11 0.14 0.20 0.23 0.23 0.32 0.32 0.34 0.36 0.36 0.38 0.49 0.56 0.59 0.59 0.67 0.69 0.79];
% glkyl=[5126 6217 7730 9145 10460 11387 12353 15750 18304 19836 21024 19490 20433 22598 25107 33442 36836 40548 42927 43462];
% glhyl=[1237 1379 1385 1399 1663 1714 1834 4322 8132 9836 11099 11203 10524 11115 13320 16762 18673 20724 20803 21804];
% p=[sqrs;sqjdcs;sqglmj];% t=[glkyl;glhyl];
P=[speed1.signals.values'/150*2-1;(acc1.signals.values'+5)/10*2-1;(Ft.signals.values'+6000)/15000*2-1];
T=[(m1.signals.values'-1150)/300*2-1;(slope1.signals.values'+0.1)/0.2*2-1];
% [P,minp,maxp,T,mint,maxt]=premnmx(p,t)
net=newff(minmax(P),[7,2,2],{'tansig','tansig','logsig'},'trainscg');
net.trainParam.show=50;
net.trainParam.lt=0.005;
net.trainParam.epochs=3000;
net.trainParam.goal=1e-5;
[net,tr]=train(net,P,T);
A=sim(net,P);
% a=postmnmx(A,mint,maxt);
newk=A(1,:)*1300;
newh=(A(2,:)+1)/2*0.4-0.2;
x=1:6091;
figure
plot(x,newk,x,m1.signals.values');
legend('网络输出客运量','实际输出');
figure
plot(x,newh,x,slope1.signals.values);
legend('网络输出货运量','实际输出');
gensim(net,-1)
%% 坡道识别————使用内置的归一化函数————%%%
p=[speed1.signals.values';acc1.signals.values';Fair1.signals.values';Ft1.signals.values'];
t=[slope1.signals.values'];
[P,minp,maxp,T,mint,maxt]=premnmx(p,t);
net=newff(minmax(P),[9,1],{'tansig','purelin'},'traingdx');
net.trainParam.show=50;
net.trainParam.lt=0.005;
net.trainParam.epochs=3000;
net.trainParam.goal=1e-4;
[net,tr]=train(net,P,T);
A=sim(net,P);
a=postmnmx(A,mint,maxt);
newk=a;
x=1:1632;
figure
plot(x,newk,x,m1.signals.values');
legend('网络输出客运量','实际输出');
%% 坡道识别---使用自定义的归一化函数——不加质量——%%%
clear all;
close all;
clc;
P=[speed1.signals.values'/150*2-1;(acc1.signals.values'+5)/10*2-1;(Ft1.signals.values'+6000)/15000*2-1];
T=[(slope1.signals.values'+0.1)/0.2*2-1];
net1=newff(minmax(P),[20,1],{'tansig','tansig'},'trainbr');
net1.trainParam.show=50;
net1.trainParam.lt=0.005;
net1.trainParam.epochs=3000;
net1.trainParam.goal=1e-4;
[net1,tr]=train(net1,P,T);
A=sim(net1,P);
% a=postmnmx(A,mint,maxt);
newh=(A+1)*0.2/2-0.1;
figure
plot(m1.time,newh,m1.time,slope1.signals.values);
legend('网络输出货运量','实际输出');
gensim(net1,-1)
%% 坡道识别---使用自定义的归一化函数——加质量——%%%
clear all;
close all;
clc;
P=[speed1.signals.values'/150*2-1;(acc1.signals.values'+5)/10*2-1;(Ft1.signals.values'+6000)/15000*2-1;(m1.signals.values'-1200)/200*2-1];
T=[(slope1.signals.values'+0.1)/0.2*2-1];
net1=newff(minmax(P),[20,1],{'tansig','tansig'},'trainbr');
net1.trainParam.show=50;
net1.trainParam.lt=0.005;
net1.trainParam.epochs=3000;
net1.trainParam.goal=1e-4;
[net1,tr]=train(net1,P,T);
A=sim(net1,P);
% a=postmnmx(A,mint,maxt);
newh=(A+1)*0.2/2-0.1;
figure
plot(m1.time,newh,m1.time,slope1.signals.values);
legend('网络输出货运量','实际输出');
gensim(net1,-1)
%% 识别质量————————%%%
P=[(f.signals.values'+5)/10;(Ft.signals.values'+5500)/10500];
T=[(m1.signals.values'-1150)/300];
% [P,minp,maxp,T,mint,maxt]=premnmx(p,t)
net=newff(minmax(P),[25,1],{'tansig','logsig'},'trainbr');
net.trainParam.show=50;
net.trainParam.lt=0.005;
net.trainParam.epochs=3000;
net.trainParam.goal=1e-5;
[net,tr]=train(net,P,T);
% net=newrb(P,T,0.1,0.1,20,5)
A=sim(net,P);
% a=postmnmx(A,mint,maxt);
newk=(A(1,:))*300+1150;
% newh=(A(2,:)+1)/2*0.4-0.2;
% x=1:6091;
figure
plot(m1.time,newk,m1.time,m1.signals.values');
legend('网络输出客运量','实际输出');
% figure
% plot(m1.time,newh,m1.time,slope1.signals.values);
% legend('网络输出货运量','实际输出');
gensim(net,-1)
%% 识别绘图
figure(1)
subplot(3,1,1);
plot(speed1.time,final_m.signals.values);
legend('实际质量','估计质量')
axis([0,1400,1200,1500]);
ylabel('质量');
subplot(3,1,2);
plot(speed1.time,final_slope.signals.values);
axis([0,1400,-11,11]);
ylabel('坡道');
legend('实际坡道','估计坡道');
subplot(3,1,3);
plot(speed1.time,speed1.signals.values);
axis([0,1400,-1,140]);
xlabel('时间');
ylabel('车速')
figure(2)
subplot(2,1,1);
plot(m1.time,nn_slope.signals.values);
legend('实际坡道','nn估计质量')
axis([0,1400,-10,10]);
ylabel('坡道');
subplot(2,1,2);
plot(m1.time,rls_slope.signals.values);
axis([0,1400,-11,11]);
ylabel('坡道');
legend('实际坡道','rls估计坡道');
%% 训练数据的图形
subplot(3,1,1);
plot(m1.time,speed1.signals.values);
ylabel('车速');
subplot(3,1,2);
plot(m1.time,slope1.signals.values);
ylabel('坡度')
subplot(3,1,3)
plot(m1.time,m1.signals.values)
ylabel('质量')
xlabel('时间')
e=nn_slope.signals.values(:,1)-nn_slope.signals.values(:,2);
rmse=mse(e)^0.5
e=rls_slope.signals.values(:,1)-rls_slope.signals.values(:,2);
rmse=mse(e)^0.5
e=final_slope.signals.values(:,1)-final_slope.signals.values(:,2);
rmse=mse(e)^0.5
q=final_m.signals.values(500:38000,:);
e=q(:,1)-q(:,2);
rmse=mse(e)^0.5
%% 训练数据图片
subplot(4,1,1)
hold on;
plot(m1.time(1:36900),speed1.signals.values(1:36900),m1.time(36901:73800),speed1.signals.values(36901:73800),m1.time(73801:110700),speed1.signals.values(73801:110700));
hold on
plot([369 369], [0 160])
plot([738 738],[0 160])
ylabel('v(m/s)')
axis([0,1107,-0.1,110])
subplot(4,1,2)
hold on;
plot(m1.time(1:36900),Ft1.signals.values(1:36900),m1.time(36901:73800),Ft1.signals.values(36901:73800),m1.time(73801:110700),Ft1.signals.values(73801:110700));
plot([369 369], [-5000 5000])
plot([738 738],[-5000 5000])
ylabel('Driving Force(N)')
ylabel('v(m/s)')
axis([0,1107,-5000,5000])
subplot(4,1,3)
hold on;
plot(m1.time(1:36900),acc1.signals.values(1:36900),m1.time(36901:73800),acc1.signals.values(36901:73800),m1.time(73801:110700),acc1.signals.values(73801:110700));
plot([369 369], [-110 110])
plot([