个人收集整理仅供参考学习clearall;closeall;ts=20;sys1=tf([1],[60,1],'inputdelay',80);%生成或转换传递函数模型dsys1=c2d(sys1,ts,'zoh');%将连续系统离散化[num1,den1]=tfdata(dsys1,'v');%传统PID算法u_1=0;u_2=0;u_3=0;u_4=0;u_5=0;y_1=0;y_2=0;y_3=0;error_1=0;ei=0;fork=1:1:300time(k)=k*ts;rin(k)=40;yout(k)=-den1(2)*y_1+num1(2)*u_5;error(k)=rin(k)-yout(k);ei=ei+error(k)*ts;kp=0.8;ki=0.005;kd=3.0;u(k)=kp*error(k)+kd*(error(k)-error_1)/ts+ki*ei;ifu(k)=110u(k)=110;endifu(k)=-110u(k)=-110;end%返回PID参数u_5=u_4;u_4=u_3;u_3=u_2;u_2=u_1;u_1=u(k);y_3=y_2;y_2=y_1;y_1=yout(k);error_1=error(k);end%获得传递函数模型数据个人收集整理仅供参考学习%模糊PID控制系统a=newfis('fuzzf');%创建新的模糊推理系统f1=1;a=addvar(a,'input','e',[-5*f1,5*f1]);%添加e的模糊语言变量a=addmf(a,'input',1,'NB','trimf',[-7.5-5-2.5]);%添加e的模糊语言变量的隶属度函数(z型)a=addmf(a,'input',1,'NS','trimf',[-5-2.50]);a=addmf(a,'input',1,'ZE','trimf',[-2.502.5]);a=addmf(a,'input',1,'PS','trimf',[02.55]);a=addmf(a,'input',1,'PB','smf',[2.557.5]);f2=1;a=addvar(a,'input','ec',[-10*f2,10*f2]);%添加ec的模糊语言变量a=addmf(a,'input',2,'NB','trimf',[-15-10-5]);a=addmf(a,'input',2,'NS','trimf',[-10-50]);a=addmf(a,'input',2,'Z','trimf',[-5-5.551e-0175]);a=addmf(a,'input',2,'PS','trimf',[0510]);a=addmf(a,'input',2,'PB','smf',[51015]);f3=1.5;a=addvar(a,'output','u',[0*f3,220*f3]);%添加u的模糊语言变量a=addmf(a,'output',1,'NB','trimf',[-55-4.441e-01655]);a=addmf(a,'output',1,'NS','trimf',[055110]);a=addmf(a,'output',1,'Z','trimf',[55110165]);a=addmf(a,'output',1,'PS','trimf',[110165220]);a=addmf(a,'output',1,'PB','smf',[165220275]);rulelist=[11511;%编辑模糊规则12511;13511;14511;15511;21511;22411;23411;24311;25211;31511;32411;个人收集整理仅供参考学习33311;34211;35211;41411;42311;43211;44211;45111;51111;52111;53111;54111;55111;]a=addrule(a,rulelist);%添加模糊规则函数showrule(a)%显示模糊规则函数a1=setfis(a,'DefuzzMethod','centroid');%设置模糊系统特性writefis(a1,'fuzzf');%保存模糊系统a2=readfis('fuzzf');%从磁盘读出保存的模糊系统disp('fuzzyControllertable:e=[-5,+5],ec=[-10,+10]');%显示矩阵和数组内容Ulist=zeros(5,5);%全零矩阵fori=1:5forj=1:5e(i)=-4+i;ec(j)=-4+j;Ulist(i,j)=evalfis([e(i),ec(j)],a2);%完成模糊推理计算endendUlist=ceil(Ulist)sys1=tf([1],[60,1],'inputdelay',80);dsys=c2d(sys1,ts,'zoh');[num,den]=tfdata(dsys,'v');U_1=0;U_2=0;U_3=0;U_4=0;U_5=0;Y_1=0;Y_2=0;Y_3=0;e_1=0.0;ec_1=0.0;Error_1=0;Ei=0fork=1:1:300time(k)=k*ts;rin(k)=40;U(k)=evalfis([e_1,ec_1],a2);%完成模糊推理计算Yout(k)=-den(2)*Y_1+num(2)*U_5;个人收集整理仅供参考学习Error(k)=rin(k)-Yout(k);ki=0.003;Ei=Ei+Error(k)*ts;U(k)=U(k)+ki*Ei;%返回参数U_5=U_4;U_4=U_3;U_3=U_2;U_2=U_1;U_1=U(k);Y_3=Y_2;Y_2=Y_1;Y_1=Yout(k);e_1=Error(k);ec_1=Error(k)-Error_1;Error_1=Error(k);end%朝正无穷方向取整figure(1);plotfis(a2);figure(2);plotmf(a,'input',1);figure(3);plotmf(a,'input',2);figure(4);plotmf(a,'output',1);figure(1);plot(time,rin,'b',time,yout,'r');xlabel('time(s)');ylabel('rin,yout');figure(2);plot(time,u,'r');xlabel('time(s)');ylabel('u');figure(3);plot(time,rin,'b',time,Yout,'r');xlabel('time(s)');ylabel('rin,yout');figure(4);plot(time,U,'r');xlabel('time(s)');ylabel('u');figure(5);plotfis(a2);figure(6);plotmf(a2,'input',1);figure(7);plotmf(a2,'input',2);figure(8);plotmf(a2,'output',1);