1.完整项目描述和程序获取
>面包多安全交易平台:https://mbd.pub/o/bread/ZJWXlJZv
>如果链接失效,可以直接打开本站店铺搜索相关店铺:
>如果链接失效,程序调试报错或者项目合作也可以加微信或者QQ联系。
2.部分仿真图预览
3.算法概述
PID 控制器的方块图PID 控制器是一个在工业控制应用中常见的反馈回路部件。这个控制器把收集到的数据和一个参考值进行比较,然后把这个差别用于计算新的输入值,这个新的输入值的目的是可以让系统的数据达到或者保持在参考值。和其他简单的控制运算不同,PID控制器可以根据历史数据和差别的出现率来调整输入值,这样可以使系统更加准确,更加稳定。可以通过数学的方法证明,在其他控制方法导致系统有稳定误差或过程反复的情况下,一个PID反馈回路却可以保持系统的稳定。
4.部分源码
.......................................................
...........................................................
%%%前向传播----------------------------------------
net2=xi*(wi');
for j=1:1:H
Oh(j)=( exp( net2(j)-exp(-net2(j)) ) )/(exp( net2(j)+exp(-net2(j)) ));
end
net3=wo*Oh;
for l=1:1:Out
K(l)=exp(net3(l))/(exp(net3(l))+exp(-net3(l)));
end
kp(k)=M(1)*K(1); ki(k)=M(2)*K(2); kd(k)=M(3)*K(3);
Kpid=[kp(k),ki(k),kd(k)];
du(k)=Kpid*epid;
u(k)=u_1+du(k);
if u(k)>10
u(k)=10;
end
if u(k)<-10
u(k)=-10;
end
%%%后向传播------------------------------------------------
dyu(k)=sign((yout(k)-y_1)/(du(k)-du_1+0.0001));
for j=1:1:Out
dK(j)=1/(exp(net3(j))+exp(-net3(j)));
%dK(j)=M;
end
for l=1:1:Out
delta3(l)=error(k)*dyu(k)*epid(l)*dK(l);
end
for l=1:1:Out
for i=1:1:H
d_wo=xite*delta3(l)*Oh(i)+alfa*(wo_1-wo_2);
end
end
wo=wo_1+d_wo+alfa*(wo_1-wo_2);
for i=1:1:H
dO(i)=4/(exp(net2(i))+exp(-net2(i)))^2;
end
segma=delta3*wo;
for i=1:1:H
delta2(i)=dO(i)*segma(i);
end
d_wi=xite*delta2'*xi;
wi=wi_1+d_wi+alfa*(wi_1-wi_2);
wo_2=wo_1; wo_1=wo;
wi_2=wi_1; wi_1=wi;
du_1=du(k);
u_7=u_6;u_6=u_5;u_5=u_4; u_4=u_3;u_3=u_2;u_2=u_1;u_1=u(k);
y_2=y_1; y_1=yout(k);
error_2=error_1; error_1=error(k);
end
figure;
[t,y]=BPNN_PID();
plot(t,y,'g','Linewidth',2);
hold on;
plot(time,rin,'k','Linewidth',2);
xlabel('t/s'); ylabel('rin,yout');
hold on ;
plot(time,yout,'r','Linewidth',2);
hold on;
[x,y]=classic_PID();
plot(x,y,'b','Linewidth',2);
%-----------------
figure;
plot(time,error,'b','Linewidth',2);
xlabel('t/s');
ylabel('error');
figure;
plot(time,u,'b','Linewidth',2);
xlabel('t/s');
ylabel('u');
figure;
subplot(311);
plot(time,kp,'b','Linewidth',2);
xlabel('t/s');
ylabel('kp');
ylim([9.897,9.903])
subplot(312);
plot(time,ki,'b','Linewidth',2);
xlabel('t/s');
ylabel('ki');
subplot(313);
plot(time,kd,'b','Linewidth',2);
xlabel('t/s');
ylabel('kd');
A384