资源描述:
《BP神经网络整定的PID算法_matlab源程序.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、%BPbasedPIDControlclearall;closeall;xite=0.28;%学习速率alfa=0.001;%惯性系数IN=4;H=5;Out=3;%NNStructure(构造,神经网络结构)wi=0.50*rands(H,IN);wi_1=wi;wi_2=wi;wi_3=wi;wo=0.50*rands(Out,H);wo_1=wo;wo_2=wo;wo_3=wo;%构成变量Oh=zeros(H,1);%OutputfromNNmiddlelayerI=Oh;%InputtoNNmiddlelayererror_2
2、=0;error_1=0;ts=0.01;sys=tf(2.6126,[1,3.201,2.7225]);%建立被控对象传递函数(LTIViewer对象模型sys=tf(num,den)将由传递函数模型所描述系统封装成对应的系统对象模型。dsys=c2d(sys,ts,'z');%把传递函数离散化(零阶保持器法离散化)[num,den]=tfdata(dsys,'v');%离散化后提取分子、分母(提取每项的常数)fork=1:1:2000%频率参数,构成一维数组time(k)=k*ts;rin(k)=40;yout(k)=-den(2
3、)*y_1-den(3)*y_2+num(2)*u_2+num(3)*u_3;error(k)=rin(k)-yout(k);xi=[rin(k),yout(k),error(k),1];x(1)=error(k)-error_1;%计算Px(2)=error(k);%计算Ix(3)=error(k)-2*error_1+error_2;%计算Depid=[x(1);x(2);x(3)];I=xi*wi';%theoutputoftheinputlayer,and1*5forj=1:1:HOh(j)=(exp(I(j))-exp(-I
4、(j)))/(exp(I(j))+exp(-I(j)));%Middlelayer'soutputendK=wo*Oh;%OutputLayer(theinputofoutputlayer)forl=1:1:OutK(l)=exp(K(l))/(exp(K(l))+exp(-K(l)));%Gettingkp,ki,kdendkp(k)=K(1);ki(k)=K(2);kd(k)=K(3);Kpid=[kp(k),ki(k),kd(k)];du(k)=Kpid*epid;%theincrement(增加)oftheoutput"u"u
5、(k)=u_1+du(k);%theoutputofthevalueofcontrollingifu(k)>=45%Restricting(限制)theoutputofcontrolleru(k)=45;endifu(k)<=-45u(k)=-45;enddyu(k)=sign((yout(k)-y_1)/(u(k)-u_1+0.));%当x<0时,sign(x)=-1当x=0时,sign(x)=0;当x>0时,sign(x)=1。dyu(k)表示什么%Outputlayerforj=1:1:OutdK(j)=2/(exp(K(j))
6、+exp(-K(j)))^2;%thevalueofg'()endforl=1:1:Outdelta3(l)=error(k)*dyu(k)*epid(l)*dK(l);%输出值endforl=1:1:Outfori=1:1:Hd_wo=xite*delta3(l)*Oh(i)+alfa*(wo_1-wo_2);%输出层权值的计算定义endendwo=wo_1+d_wo+alfa*(wo_1-wo_2);%wo更新%Hidden(隐藏)layerfori=1:1:HdO(i)=4/(exp(I(i))+exp(-I(i)))^2;%t
7、hevalueofthef'()endsegma=delta3*wo;%thesum(总和)fori=1:1:Hdelta2(i)=dO(i)*segma(i);%求endd_wi=xite*delta2'*xi;wi=wi_1+d_wi+alfa*(wi_1-wi_2);%不就是wi修改更新的过程吗?个人认为:如果被控对象的表达式:'yout'改变的话,权值修改的中间过程都不要改变,因为不管系统的输出是什么,bp神经网络权值修改的公式都是一样的啊。有可能的话,可以把权值的初始值改一下,不是必须的,反正神经网络会自己调整权值,只要不陷
8、入局部极小值就可以了(对不同的系统可以采取修改权值学习效率和惯性系数来调整神经网络的控制效果)%Parameters(参数,变量)Update(更新)u_5=u_4;u_4=u_3;u_3=u_2;u_2=u_1;u_1