當前位置:股票大全官網 - 股票投資 - 求助:RBF復合PID控制的MATLAB程序,二階被控對象仿真結果發散?

求助:RBF復合PID控制的MATLAB程序,二階被控對象仿真結果發散?

% %%%%% RBF網絡PID %%%%%

全部清除;

全部關閉;

T = 0.005%采樣周期

sys=tf(1,';%網絡的輸入向量

h = 3;隱藏層節點的數量百分比

ci = 28 *個壹(3,H);

bi = 40 *個壹(H,1);

w = 30 *個壹(H,1);%網絡的權重向量

H =零(H,1);%隱藏層輸出

ci _ 1 = ci;ci _ 2 = ci _ 1;ci _ 3 = ci _ 2;

bi _ 1 = bi;bi _ 2 = bi _ 1;bi _ 3 = bi _ 2;

w _ 1 = w;w _ 2 = w _ 1;w3 = w2;

u _ 1 = 0;y _ 1 = 0;%函數中間變量

u _ 2 = 0;y _ 2 = 0;%函數中間變量

xc = ';%高斯函數的輸入

error _ 1 = 0;error _ 2 = 0;%錯誤初始化

%%%%% PID初始參數給定% %%%

KP = 1;%比例系數

ki = 0.1;%積分系數

KD = 0.01;%微分系數

KP _ 1 = KP;

ki _ 1 = ki;

KD _ 1 = KD;

xitekp = 0.5

xiteki = 0.5

xitekd = 0.5

對於k = 1: 1: 1000%抽樣。

時間(k)= k * T;

rin(k)= 1;%輸入命令信號

yout(k)=-den(3)* y _ 2-den(2)* y _ 1+num(3)* u _ 2+num(2)* u _ 1;%二階受控對象

對於j=1:1:H

h(j)=exp(-norm(x-ci_1(:,j))^2/(2*bi_1(j)*bi_1(j)));%是高斯函數。

結束

ymout(k)= w _ 1 ' * h;%表示網絡的輸出

d _ w = 0 * w%定義d_w的矩陣數等於w的矩陣數

對於j=1:1:H

d _ w(j)= xite *(yout(k)-ymout(k))* h(j);

結束

w = w _ 1+d _ w+alfa *(w _ 1-w _ 2)+belt e *(w _ 2-w _ 3);%輸出權重的叠代算法

d _ bi = 0 * bi

對於j=1:1:H

d_bi(j)=xite*(yout(k)-ymout(k))*w_1(j)*h(j)*(bi_1(j)^-3)*norm(x-ci_1(:,j))^2;

結束

bi = bi _ 1+d _ bi+alfa *(bi _ 1-bi _ 2)+belte *(bi _ 2-bi _ 3);%節點中心的叠代算法

對於j=1:1:H

因為i=1:1:3

d_ci(i,j)=xite*(yout(k)-ymout(k))*w_1(j)*h(j)*(x(i)-ci_1(i,j))*(bi_1(j)^-2);

結束

結束

ci = ci _ 1+d _ ci+alfa *(ci _ 1-ci _ 2)+belte *(ci _ 2-ci _ 3);%節點基寬參數的叠代算法

%%%%%%%%%%%%%%%%%雅可比矩陣%%%

dyu = 0;

對於j=1:1:H

dyu=dyu+w(j)*h(j)*(-x(1)+ci(1,j))/bi(j)^2;

結束

dy out(k)= dyu;

%%%%%%%%%%%%%%%控制系統啟動%%%

誤差(k)= rin(k)-yout(k);預期輸出和實際輸出之間的%偏差,即控制誤差。

KP(k)= KP _ 1+xitekp * error(k)* dy out(k)* xc(1);

KD(k)= KD _ 1+xite KD * error(k)* dy out(k)* xc(2);

ki(k)= ki _ 1+Xi teki * error(k)* dy out(k)* xc(3);

如果KP(k)& lt;0

KP = 0;

結束

如果KD(k)& lt;0

KD = 0;

結束

如果ki(k)& lt;0

ki = 0;

結束

du(k)= KP(k)* xc(1)+KD(k)* xc(2)+ki(k)* xc(3);

u(k)= u _ 1+du(k);

如果u(k)>=2

u(k)= 2;

結束

如果u(k)& lt;=0

u(k)= 0;

結束

%Return of parameters返回參數。

x(1)= du(k);

x(2)= yout(k);

x(3)= y _ 1;

u _ 1 = u(k);

y _ 1 = yout(k);

%%%%重量更新%%%%

w3 = w2;

w _ 2 = w _ 1;

w _ 1 = w;

%%%%% PID三個輸入% %%%

xc(1)= error(k)-error _ 1;%計算P

xc(2)= error(k)-2 * error _ 1+error _ 2;%計算D

xc(3)=誤差(k);%計算I

error _ 2 = error _ 1;

error _ 1 = error(k);

KP _ 1 = KP(k);

KD _ 1 = KD(k);

ki _ 1 = ki(k);

結束

圖(1);

plot(time,rin,' b ',time,yout,' r ');

xlabel(“時間”);ylabel('rin,yout ');

圖(4);

支線劇情(311);

plot(時間,kp,' r ');

xlabel(“時間”);ylabel(' KP ');

支線劇情(312);

plot(時間,ki,' g ');

xlabel(“時間”);ylabel(' ki ');

支線劇情(313);

plot(時間,kd,' b ');

xlabel(“時間”);ylabel(' KD ');

堅持住;