求助:RBF复合PID控制的MATLAB程序,对二阶被控对象的仿真结果是发散的?fork=1:1:1000%采样 time(k)=k*T;

求助:RBF复合PID控制的MATLAB程序,对二阶被控对象的仿真结果是发散的?fork=1:1:1000%采样time(k)=k*T;
for k=1:1:1000%采样 time(k)=k*T; rin(k)=1;%输入指令信号 yout(k)=-den(3)*y_2-den(2)*y_1+num(3)*u_2+num(2)*u_1; %二阶被控对象 for j=1:1:H h(j)=exp(-norm(x-ci_1(:,j))^2/(2*bi_1(j)*bi_1(j)));%为高斯函数 end ymout(k)=w_1'*h;%辨识网络的输出 d_w=0*w;% Defining matrix number of d_w equal to that of w for j=1:1:H d_w(j)=xite*(yout(k)-ymout(k))*h(j); end w=w_1+d_w+alfa*(w_1-w_2)+belte*(w_2-w_3);%输出权的迭代算法 d_bi=0*bi; for 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; end bi=bi_1+d_bi+alfa*(bi_1-bi_2)+belte*(bi_2-bi_3);%节点中心的迭代算法 for j=1:1:H for 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); end end ci=ci_1+d_ci+alfa*(ci_1-ci_2)+belte*(ci_2-ci_3);%节点基宽参数的迭代算法 %%%%%%%%%%%%%%%%%%%%%%Jacobian%%%%%%%%%%%%%%%%%% dyu=0; for j=1:1:H dyu=dyu+w(j)*h(j)*(-x(1)+ci(1,j))/bi(j)^2; end dyout(k)=dyu; %%%%%%%%%%%%%%%%%%%%%%Start of Control system%%%%%%%%%%% error(k)=rin(k)-yout(k);%期望输出与实际输出的偏差值,即控制误差 kp(k)=kp_1+xitekp*error(k)*dyout(k)*xc(1); kd(k)=kd_1+xitekd*error(k)*dyout(k)*xc(2); ki(k)=ki_1+xiteki*error(k)*dyout(k)*xc(3); if kp(k)<0 kp=0; end if kd(k)<0 kd=0; end if ki(k)<0 ki=0; end du(k)=kp(k)*xc(1)+kd(k)*xc(2)+ki(k)*xc(3); u(k)=u_1+du(k); if u(k)>=2 u(k)=2; end if u(k)<=0 u(k)=0; end %Return of parameters返回参数 x(1)=du(k); x(2)=yout(k); x(3)=y_1; u_1=u(k); y_1=yout(k); %%%%% 权值更新 %%%%% w_3=w_2; w_2=w_1; w_1=w; %%%%% PID三项输入 %%%%% xc(1)=error(k)-error_1; %Calculating P xc(2)=error(k)-2*error_1+error_2; %Calculating D xc(3)=error(k); %Calculating I error_2=error_1; error_1=error(k); kp_1=kp(k); kd_1=kd(k); ki_1=ki(k); end figure(1); plot(time,rin,'b',time,yout,'r'); xlabel('time(s)');ylabel('rin,yout'); figure(4); subplot(311); plot(time,kp,'r'); xlabel('time(s)');ylabel('kp'); subplot(312); plot(time,ki,'g'); xlabel('time(s)');ylabel('ki'); subplot(313); plot(time,kd,'b'); xlabel('time(s)');ylabel('kd'); hold on;

← 上一篇: 下一篇: →