RBF or Fuzzy &pid
来源:互联网 发布:java内存模型视频教程 编辑:程序博客网 时间:2024/06/05 08:07
%Adaptive PID control based on RBF Identificationclear all;close all;xite=0.5;alfa=0.05;beta=0.01;x=[0,0,0]';ci=zeros(3,6);bi=10*ones(6,1);w=0.10*ones(6,1);h=[0,0,0,0,0,0]'; ci_1=ci;ci_3=ci_1;ci_2=ci_1;bi_1=bi;bi_2=bi_1;bi_3=bi_2;w_1=w;w_2=w_1;w_3=w_1;u_1=0;y_1=0;xc=[0,0,0]';error_1=0;error_2=0;kp0=0.01;ki0=0.01;kd0=0.01;pidu_1=0;pidy_1=0;pidxc=[0,0,0]';piderror_1=0;piderror_2=0;pidkp=0.01;pidki=0.01;pidkd=0.01;kp_1=kp0;kd_1=kd0;ki_1=ki0;xitekp=0.15;xitekd=0.15;xiteki=0.15;% ts=0.001;ts=0.01for k=1:1:3000 time(k)=k*ts;% yd(k)=1.0; yd(k)=sin(time(k));% y(k)=(-0.1*y_1+u_1)/(1+y_1^2); y(k)=(-0.1*y_1+u_1)/(1+y_1^2); %Nonlinear plant for j=1:1:6 h(j)=exp(-norm(x-ci(:,j))^2/(2*bi(j)*bi(j))); end ym(k)=w'*h; d_w=0*w; for j=1:1:6 d_w(j)=xite*(y(k)-ym(k))*h(j); end w=w_1+d_w+alfa*(w_1-w_2); d_bi=0*bi; for j=1:1:6 d_bi(j)=xite*(y(k)-ym(k))*w(j)*h(j)*(bi(j)^-3)*norm(x-ci(:,j))^2; end bi=bi_1+ d_bi+alfa*(bi_1-bi_2); for j=1:1:6 for i=1:1:3 d_ci(i,j)=xite*(y(k)-ym(k))*w(j)*h(j)*(x(i)-ci(i,j))*(bi(j)^-2); end end ci=ci_1+d_ci+alfa*(ci_1-ci_2);%%%%%%%%%%%%%%%%%%%%%%Jacobian%%%%%%%%%%%%%%%%%%%%%%% yu=0; for j=1:1:6 yu=yu+w(j)*h(j)*(-x(1)+ci(1,j))/bi(j)^2; end dyu(k)=yu;%%%%%%%%%%%%%%%%%%%%%%Start of Control system%%%%%%%%%%%%%%%%%% error(k)=yd(k)-y(k); kp(k)=kp_1+xitekp*error(k)*dyu(k)*xc(1); kd(k)=kd_1+xitekd*error(k)*dyu(k)*xc(2); ki(k)=ki_1+xiteki*error(k)*dyu(k)*xc(3); if kp(k)<0 kp(k)=0; end if kd(k)<0 kd(k)=0; end if ki(k)<0 ki(k)=0; end M=1; switch M case 1 case 2 %Only PID Controlkp(k)=kp0;ki(k)=ki0; kd(k)=kd0; end du(k)=kp(k)*xc(1)+kd(k)*xc(2)+ki(k)*xc(3); u(k)=u_1+du(k);%Return of parameters x(1)=du(k); x(2)=y(k); x(3)=y_1; u_1=u(k); y_1=y(k); ci_3=ci_2; ci_2=ci_1; ci_1=ci; bi_3=bi_2; bi_2=bi_1; bi_1=bi; w_3=w_2; w_2=w_1; w_1=w; 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); pidy(k)=(-0.1*pidy_1+pidu_1)/(1+pidy_1^2); piderror(k)=yd(k)-pidy(k); piddu(k)=pidkp*pidxc(1)+pidkd*pidxc(2)+pidki*pidxc(3); pidu(k)=pidu_1+piddu(k); pidu_1=pidu(k); pidy_1=pidy(k); pidxc(1)=piderror(k)-piderror_1; %Calculating P pidxc(2)=piderror(k)-2*piderror_1+piderror_2; %Calculating D pidxc(3)=piderror(k); %Calculating I piderror_2=piderror_1; piderror_1=piderror(k);endif M==1figure(1);% % plot(time,yd,'r',time,y,'k:','linewidth',2);% xlabel('time(s)');ylabel('yd,y');% legend('ideal position','position tracking');% figure(2);% plot(time,y,'r',time,ym,'b','linewidth',2);% xlabel('time(s)');ylabel('y,ym');% figure(3);% plot(time,dyu,'r','linewidth',2);% xlabel('time(s)');ylabel('Jacobian value');% figure(4);% subplot(311);% plot(time,kp,'r','linewidth',2);% xlabel('time(s)');ylabel('kp');% subplot(312);% plot(time,ki,'r','linewidth',2);% xlabel('time(s)');ylabel('ki');% subplot(313);% plot(time,kd,'r','linewidth',2);% xlabel('time(s)');ylabel('kd');% elseif M==2% figure(1);% plot(time,yd,'r',time,y,'k:','linewidth',2);plot(time,yd,'r',time,y,'g',time,pidy,'k');xlabel('time(s)');ylabel('yd,y');legend('ideal position','RBF tracking','PID tracking');figure(2);plot(time,y,'r',time,ym,'b');xlabel('time(s)');ylabel('y,ym');figure(3);plot(time,dyu,'r');xlabel('time(s)');ylabel('Jacobian value');figure(4);subplot(311);plot(time,kp,'r');xlabel('time(s)');ylabel('kp');subplot(312);plot(time,ki,'r');xlabel('time(s)');ylabel('ki');subplot(313);plot(time,kd,'r');xlabel('time(s)');ylabel('kd');figure(5);subplot(211);plot(time,error,'r');xlabel('time(s)');ylabel('error');subplot(212);plot(time,piderror,'r');xlabel('time(s)');ylabel('piderror');elseif M==2figure(1);plot(time,yd,'r',time,y,'k:');xlabel('time(s)');ylabel('yd,y');legend('ideal position','position tracking');end
%Adaptive PID control based on RBF Identificationclear all;close all;xite=0.5;alfa=0.05;beta=0.01;x=[0,0,0]';ci=zeros(3,6);bi=10*ones(6,1);w=0.10*ones(6,1);h=[0,0,0,0,0,0]'; ci_1=ci;ci_3=ci_1;ci_2=ci_1;bi_1=bi;bi_2=bi_1;bi_3=bi_2;w_1=w;w_2=w_1;w_3=w_1;u_1=0;y_1=0;xc=[0,0,0]';error_1=0;error_2=0;kp0=0.01;ki0=0.01;kd0=0.01;pidu_1=0;pidy_1=0;pidxc=[0,0,0]';piderror_1=0;piderror_2=0;pidkp=0.01;pidki=0.01;pidkd=0.01;kp_1=kp0;kd_1=kd0;ki_1=ki0;xitekp=0.15;xitekd=0.15;xiteki=0.15;% ts=0.001;ts=0.01for k=1:1:2000 time(k)=k*ts; if mod(floor(k/100),3)==0 yd(k)=1; elseif mod(floor(k/100),3)==1 yd(k)=0; else yd(k)=-1; end% yd(k)=sin(time(k));% yd(k)=3*sin(time(floor(k/10)+1))-2*cos(time(floor(k/10)+1));% yd(k)=floor(k/500);% y(k)=(-0.1*y_1+u_1)/(1+y_1^2); y(k)=(-0.1*y_1+u_1)/(1+y_1^2); %Nonlinear plant for j=1:1:6 h(j)=exp(-norm(x-ci(:,j))^2/(2*bi(j)*bi(j))); end ym(k)=w'*h; d_w=0*w; for j=1:1:6 d_w(j)=xite*(y(k)-ym(k))*h(j); end w=w_1+d_w+alfa*(w_1-w_2); d_bi=0*bi; for j=1:1:6 d_bi(j)=xite*(y(k)-ym(k))*w(j)*h(j)*(bi(j)^-3)*norm(x-ci(:,j))^2; end bi=bi_1+ d_bi+alfa*(bi_1-bi_2); for j=1:1:6 for i=1:1:3 d_ci(i,j)=xite*(y(k)-ym(k))*w(j)*h(j)*(x(i)-ci(i,j))*(bi(j)^-2); end end ci=ci_1+d_ci+alfa*(ci_1-ci_2);%%%%%%%%%%%%%%%%%%%%%%Jacobian%%%%%%%%%%%%%%%%%%%%%%% yu=0; for j=1:1:6 yu=yu+w(j)*h(j)*(-x(1)+ci(1,j))/bi(j)^2; end dyu(k)=yu;%%%%%%%%%%%%%%%%%%%%%%Start of Control system%%%%%%%%%%%%%%%%%% error(k)=yd(k)-y(k); kp(k)=kp_1+xitekp*error(k)*dyu(k)*xc(1); kd(k)=kd_1+xitekd*error(k)*dyu(k)*xc(2); ki(k)=ki_1+xiteki*error(k)*dyu(k)*xc(3); if kp(k)<0 kp(k)=0; end if kd(k)<0 kd(k)=0; end if ki(k)<0 ki(k)=0; end M=1; switch M case 1 case 2 %Only PID Controlkp(k)=kp0;ki(k)=ki0; kd(k)=kd0; end du(k)=kp(k)*xc(1)+kd(k)*xc(2)+ki(k)*xc(3); u(k)=u_1+du(k); if k==300 % Adding disturbance(1.0v at time 0.3s) u(k)=u(k)+0.0; end if u(k)>=50 u(k)=10; end if u(k)<=-50 u(k)=-10; end %Return of parameters x(1)=du(k); x(2)=y(k); x(3)=y_1; u_1=u(k); y_1=y(k); ci_3=ci_2; ci_2=ci_1; ci_1=ci; bi_3=bi_2; bi_2=bi_1; bi_1=bi; w_3=w_2; w_2=w_1; w_1=w; 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); pidy(k)=(-0.1*pidy_1+pidu_1)/(1+pidy_1^2); piderror(k)=yd(k)-pidy(k); piddu(k)=pidkp*pidxc(1)+pidkd*pidxc(2)+pidki*pidxc(3); pidu(k)=pidu_1+piddu(k); if k==300 % Adding disturbance(1.0v at time 0.3s) pidu(k)=pidu(k)+1.0; end if pidu(k)>=10 pidu(k)=10; end if pidu(k)<=-10 pidu(k)=-10; end pidu_1=pidu(k); pidy_1=pidy(k); pidxc(1)=piderror(k)-piderror_1; %Calculating P pidxc(2)=piderror(k)-2*piderror_1+piderror_2; %Calculating D pidxc(3)=piderror(k); %Calculating I piderror_2=piderror_1; piderror_1=piderror(k);endif M==1figure(1);% % plot(time,yd,'r',time,y,'k:','linewidth',2);% xlabel('time(s)');ylabel('yd,y');% legend('ideal position','position tracking');% figure(2);% plot(time,y,'r',time,ym,'b','linewidth',2);% xlabel('time(s)');ylabel('y,ym');% figure(3);% plot(time,dyu,'r','linewidth',2);% xlabel('time(s)');ylabel('Jacobian value');% figure(4);% subplot(311);% plot(time,kp,'r','linewidth',2);% xlabel('time(s)');ylabel('kp');% subplot(312);% plot(time,ki,'r','linewidth',2);% xlabel('time(s)');ylabel('ki');% subplot(313);% plot(time,kd,'r','linewidth',2);% xlabel('time(s)');ylabel('kd');% elseif M==2% figure(1);% plot(time,yd,'r',time,y,'k:','linewidth',2);plot(time,yd,'r',time,y,'g',time,pidy,'k:');xlabel('time(s)');ylabel('yd,y');legend('ideal position','RBF tracking','PID tracking');figure(2);plot(time,y,'r',time,ym,'b');xlabel('time(s)');ylabel('y,ym');figure(3);plot(time,dyu,'r');xlabel('time(s)');ylabel('Jacobian value');figure(4);subplot(311);plot(time,kp,'r');xlabel('time(s)');ylabel('kp');subplot(312);plot(time,ki,'r');xlabel('time(s)');ylabel('ki');subplot(313);plot(time,kd,'r');xlabel('time(s)');ylabel('kd');figure(5);subplot(211);plot(time,error,'r');xlabel('time(s)');ylabel('error');subplot(212);plot(time,piderror,'r');xlabel('time(s)');ylabel('piderror');elseif M==2figure(1);plot(time,yd,'r',time,y,'k:');xlabel('time(s)');ylabel('yd,y');legend('ideal position','position tracking');end
%Fuzzy Tunning PID Controlclear all;close all;a=newfis('fuzzpid');a=addvar(a,'input','e',[-3,3]); %Parameter ea=addmf(a,'input',1,'NB','zmf',[-3,-1]);a=addmf(a,'input',1,'NM','trimf',[-3,-2,0]);a=addmf(a,'input',1,'NS','trimf',[-3,-1,1]);a=addmf(a,'input',1,'Z','trimf',[-2,0,2]);a=addmf(a,'input',1,'PS','trimf',[-1,1,3]);a=addmf(a,'input',1,'PM','trimf',[0,2,3]);a=addmf(a,'input',1,'PB','smf',[1,3]);a=addvar(a,'input','ec',[-3,3]); %Parameter eca=addmf(a,'input',2,'NB','zmf',[-3,-1]);a=addmf(a,'input',2,'NM','trimf',[-3,-2,0]);a=addmf(a,'input',2,'NS','trimf',[-3,-1,1]);a=addmf(a,'input',2,'Z','trimf',[-2,0,2]);a=addmf(a,'input',2,'PS','trimf',[-1,1,3]);a=addmf(a,'input',2,'PM','trimf',[0,2,3]);a=addmf(a,'input',2,'PB','smf',[1,3]);a=addvar(a,'output','kp',[-0.3,0.3]); %Parameter kpa=addmf(a,'output',1,'NB','zmf',[-0.3,-0.1]);a=addmf(a,'output',1,'NM','trimf',[-0.3,-0.2,0]);a=addmf(a,'output',1,'NS','trimf',[-0.3,-0.1,0.1]);a=addmf(a,'output',1,'Z','trimf',[-0.2,0,0.2]);a=addmf(a,'output',1,'PS','trimf',[-0.1,0.1,0.3]);a=addmf(a,'output',1,'PM','trimf',[0,0.2,0.3]);a=addmf(a,'output',1,'PB','smf',[0.1,0.3]);a=addvar(a,'output','ki',[-0.06,0.06]); %Parameter kia=addmf(a,'output',2,'NB','zmf',[-0.06,-0.02]);a=addmf(a,'output',2,'NM','trimf',[-0.06,-0.04,0]);a=addmf(a,'output',2,'NS','trimf',[-0.06,-0.02,0.02]);a=addmf(a,'output',2,'Z','trimf',[-0.04,0,0.04]);a=addmf(a,'output',2,'PS','trimf',[-0.02,0.02,0.06]);a=addmf(a,'output',2,'PM','trimf',[0,0.04,0.06]);a=addmf(a,'output',2,'PB','smf',[0.02,0.06]);a=addvar(a,'output','kd',[-3,3]); %Parameter kpa=addmf(a,'output',3,'NB','zmf',[-3,-1]);a=addmf(a,'output',3,'NM','trimf',[-3,-2,0]);a=addmf(a,'output',3,'NS','trimf',[-3,-1,1]);a=addmf(a,'output',3,'Z','trimf',[-2,0,2]);a=addmf(a,'output',3,'PS','trimf',[-1,1,3]);a=addmf(a,'output',3,'PM','trimf',[0,2,3]);a=addmf(a,'output',3,'PB','smf',[1,3]);rulelist=[1 1 7 1 5 1 1; 1 2 7 1 3 1 1; 1 3 6 2 1 1 1; 1 4 6 2 1 1 1; 1 5 5 3 1 1 1; 1 6 4 4 2 1 1; 1 7 4 4 5 1 1; 2 1 7 1 5 1 1; 2 2 7 1 3 1 1; 2 3 6 2 1 1 1; 2 4 5 3 2 1 1; 2 5 5 3 2 1 1; 2 6 4 4 3 1 1; 2 7 3 4 4 1 1; 3 1 6 1 4 1 1; 3 2 6 2 3 1 1; 3 3 6 3 2 1 1; 3 4 5 3 2 1 1; 3 5 4 4 3 1 1; 3 6 3 5 3 1 1; 3 7 3 5 4 1 1; 4 1 6 2 4 1 1; 4 2 6 2 3 1 1; 4 3 5 3 3 1 1; 4 4 4 4 3 1 1; 4 5 3 5 3 1 1; 4 6 2 6 3 1 1; 4 7 2 6 4 1 1; 5 1 5 2 4 1 1; 5 2 5 3 4 1 1; 5 3 4 4 4 1 1; 5 4 3 5 4 1 1; 5 5 3 5 4 1 1; 5 6 2 6 4 1 1; 5 7 2 7 4 1 1; 6 1 5 4 7 1 1; 6 2 4 4 5 1 1; 6 3 3 5 5 1 1; 6 4 2 5 5 1 1; 6 5 2 6 5 1 1; 6 6 2 7 5 1 1; 6 7 1 7 7 1 1; 7 1 4 4 7 1 1; 7 2 4 4 6 1 1; 7 3 2 5 6 1 1; 7 4 2 6 6 1 1; 7 5 2 6 5 1 1; 7 6 1 7 5 1 1; 7 7 1 7 7 1 1]; a=addrule(a,rulelist);a=setfis(a,'DefuzzMethod','centroid');writefis(a,'fuzzpid');a=readfis('fuzzpid');%PID Controller% ts=0.001;ts=0.01;sys=tf(5.235e005,[1,87.35,1.047e004,0]);% sys=tf(1,[1,25,1,0]);dsys=c2d(sys,ts,'tustin');[num,den]=tfdata(dsys,'v');u_1=0.0;u_2=0.0;u_3=0.0;y_1=0;y_2=0;y_3=0;x=[0,0,0]';error_1=0;e_1=0.0;ec_1=0.0;pidu_1=0.0;pidu_2=0.0;pidu_3=0.0;pidy_1=0;pidy_2=0;pidy_3=0;pidx=[0,0,0]';piderror_1=0;pide_1=0.0;pidec_1=0.0;kp0=0.40;kd0=1.0;ki0=0.0;% for k=1:1:500for k=1:1:5000time(k)=k*ts;rin(k)=1;% rin(k)=sin(time(k));%Using fuzzy inference to tunning PIDk_pid=evalfis([e_1,ec_1],a);kp(k)=kp0+k_pid(1);ki(k)=ki0+k_pid(2);kd(k)=kd0+k_pid(3);u(k)=kp(k)*x(1)+kd(k)*x(2)+ki(k)*x(3);if k==300 % Adding disturbance(1.0v at time 0.3s) u(k)=u(k)+1.0;endif u(k)>=10 u(k)=10;endif u(k)<=-10 u(k)=-10;endyout(k)=-den(2)*y_1-den(3)*y_2-den(4)*y_3+num(1)*u(k)+num(2)*u_1+num(3)*u_2+num(4)*u_3;% yout(k)=(-0.1*y_1+u_1)/(1+y_1^2);error(k)=rin(k)-yout(k);%%%%%%%%%%%%%%Return of PID parameters%%%%%%%%%%%%%%% u_3=u_2; u_2=u_1; u_1=u(k); y_3=y_2; y_2=y_1; y_1=yout(k); x(1)=error(k); % Calculating P x(2)=error(k)-error_1; % Calculating D x(3)=x(3)+error(k); % Calculating I e_1=x(1); ec_1=x(2); error_2=error_1; error_1=error(k);pidu(k)=0.4*pidx(1)+0.001*pidx(2)+0.03*pidx(3);if k==300 % Adding disturbance(1.0v at time 0.3s) pidu(k)=pidu(k)+1.0;endif pidu(k)>=10 pidu(k)=10;endif pidu(k)<=-10 pidu(k)=-10;endpidyout(k)=-den(2)*pidy_1-den(3)*pidy_2-den(4)*pidy_3+num(1)*pidu(k)+num(2)*pidu_1+num(3)*pidu_2+num(4)*pidu_3;% pidyout(k)=(-0.1*pidy_1+pidu_1)/(1+pidy_1^2);piderror(k)=rin(k)-pidyout(k);%%%%%%%%%%%%%%Return of PID parameters%%%%%%%%%%%%%%% pidu_3=pidu_2; pidu_2=pidu_1; pidu_1=pidu(k); pidy_3=pidy_2; pidy_2=pidy_1; pidy_1=pidyout(k); pidx(1)=piderror(k); % Calculating P pidx(2)=piderror(k)-piderror_1; % Calculating D pidx(3)=pidx(3)+piderror(k); % Calculating I pide_1=pidx(1); pidec_1=pidx(2); piderror_2=piderror_1; piderror_1=piderror(k);endshowrule(a)figure(1);plot(time,rin,'r',time,yout,'k',time,pidyout,'g');legend('ideal position','fuzzy tracking','PID tracking');xlabel('time(s)');ylabel('rin,yout');figure(2);plot(time,error,'r');xlabel('time(s)');ylabel('error');figure(3);plot(time,u,'r');xlabel('time(s)');ylabel('u');figure(4);subplot(311)plot(time,kp,'r');xlabel('time(s)');ylabel('kp');subplot(312)plot(time,ki,'r');xlabel('time(s)');ylabel('ki');subplot(313)plot(time,kd,'r');xlabel('time(s)');ylabel('kd');figure(5);plotmf(a,'input',1);figure(6);plotmf(a,'input',2);figure(7);plotmf(a,'output',1);figure(8);plotmf(a,'output',2);figure(9);plotmf(a,'output',3);% plotfis(a);% fuzzy fuzzpid
阅读全文
0 0
- RBF or Fuzzy &pid
- RBF-PID
- Fuzzy Time
- fuzzy clustering
- RBF神经网络
- RBF网络
- RBF网络
- RBF网络
- RBF神经网络
- RBF神经网络
- matlab---RBF
- RBF神经网络
- RBF神经网络
- UVA 1462 or UVALive 4769 Fuzzy Google Suggest Trie树上的dfs 2009年哈尔滨G题
- 【zookeeper】data/zookeeper_server.pid: No such file or directory FAILED TO WRITE PID 报错
- /zookeeper_server.pid: No such file or directory FAILED TO WRITE PID
- MySQL manager or server PID file could not be found!
- MySQLmanager or server PID file could not be found!
- Javascript面向对象编程(二):构造函数的继承
- 史上最好记的事件分发机制
- 基于ssh和wsadmin的远程websphere部署
- pyecharts和matplotlib:基于python柱状图可视化
- Android 判断当前系统语言
- RBF or Fuzzy &pid
- HDU 1232 畅通工程
- 正则表达式简介
- 查看电脑核数
- angular2的第一个项目
- [日推荐] 『KORJO母爱小空间』妈妈带宝宝出门再也不用愁啦!
- Silhouette-Outlined Diffuse
- python 深入理解 赋值、引用、拷贝、作用域
- 图文演示绘制思维导图,分析流程图怎么画小技巧