資源簡介
實現BP神經網絡自動控制PID三個參數,并用附加動量項和自學習速率法來改進BP神經網絡容易掉入局部極小值的缺點
代碼片段和文件信息
clear?all;
close?all;
xite_1=0.2;
alfa=0.95;
IN=4;H=5;Out=3;
wi=[-0.6394??-0.2696??-0.3756???-0.7023;
????-0.8603??-0.2013??-0.5024??-0.2596;?
????-1.0000??0.5543???-1.0000???-0.5437;
????-0.3625??-0.0724??0.6463??-0.2859;
????0.1425??0.0279????-0.5406???-0.7660
????];?%隱含層加入按系數初始化?
wi_1=wi;wi_2=wi;wi_3=wi;
wo=[0.7576???0.2616???0.5820???-0.1416???-0.1325?;
???-0.1146???0.2949???0.8352????0.2205????0.4508??;
???0.7201???0.4566???0.7672????0.4962????0.3632??];?%輸出層加權系數初始化s
wo_1=wo;wo_2=wo;wo_3=wo;
ts=40%采樣周期取值
x=[000];?%比例、積分、微分初值
u_1=0.0;u_2=0.0;u_3=0.0;u_4=0;u_5=0;
y_1=0.0;y_2=0.0;y_3=0;
Oh=zeros(H1);%隱含層的輸出???
I=Oh;?????%隱含層的輸入????????
error_2=0;
error_1=0;
de_1=0;
sys=tf(1.2[208?1]‘inputdelay‘80);%建立被控對象的傳遞函數?
%?sys=tf([5][8?1]‘inputdelay‘80);%建立被控對象的傳遞函數?
dsys=c2d(systs‘zoh‘);%把傳遞函數離散化
[numden]=tfdata(dsys‘v‘);%離散化后提取分子、分母
for?k=1:1:500?%仿真開始?共1000步
?????time(k)=k;
?????rin(k)=1.0;
?????if(k==250)
?????????rin(k)=2.0;
?????end
?????yout(k)=-den(2)*y_1+num(2)*u_5;
?????error(k)=rin(k)-yout(k);
?????xi=[rin(k)yout(k)error(k)5];?
????
?????x(1)=error(k)-error_1;?%比例輸出?
?????x(2)=error(k);%積分輸出?
?????x(3)=error(k)-2*error_1+error_2;%微分輸出
?????epid=[x(1);x(2);x(3)];?
?????I=xi*wi‘;?%隱含層的輸入,即輸入層輸入*權值
?????for?j=1:1:H?
??????Oh(j)=(exp(I(j))-exp(-I(j)))/(exp(I(j))+exp(-I(j)));%在激活函數作用下隱含層的輸出
?????end
?????K=wo*Oh;?%輸出層的輸入,即隱含層的輸出*權值
?????for?l=1:1:Out?
???????K(l)=exp(K(l))/(exp(K(l))+exp(-K(l)));%輸出層的輸出,即PID三個參數??????
?????end?
?????
?????kp(k)=K(1);ki(k)=K(2);kd(k)=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?
????
????de(k)=error(k)-error_1;
????if(de(k)>(de_1*1.04))
?????????xite(k)=0.7*xite_1;
%?????????alf
- 上一篇:圖像骨架提取細化
- 下一篇:帶有GUI設計的擴頻通信Matlab代碼.zip
評論
共有 條評論