MATLAB模糊控制仿真程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
clear all;
close all;
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;
for k=1:1:300
time(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;
if u(k)>=110
u(k)=110;
end
if u(k)<=-110
u(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.5 0]);
a=addmf(a,'input',1,'ZE','trimf',[-2.5 0 2.5]);
a=addmf(a,'input',1,'PS','trimf',[0 2.5 5]);
a=addmf(a,'input',1,'PB','smf',[2.5 5 7.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 -5 0]);
a=addmf(a,'input',2,'Z','trimf', [-5 -5.551e-017 5]);
a=addmf(a,'input',2,'PS','trimf', [0 5 10]);
a=addmf(a,'input',2,'PB','smf', [5 10 15]);
f3=1.5;
a=addvar(a,'output','u',[0*f3,220*f3]);
%添加u 的模糊语言变量
a=addmf(a,'output',1,'NB','trimf', [-55 -4.441e-016 55]); a=addmf(a,'output',1,'NS','trimf', [0 55 110]);
a=addmf(a,'output',1,'Z','trimf', [55 110 165]);
a=addmf(a,'output',1,'PS','trimf', [110 165 220]);
a=addmf(a,'output',1,'PB','smf',[165 220 275]);
rulelist=[1 1 5 1 1; %编辑模糊规则
1 2 5 1 1;
1 3 5 1 1;
1 4 5 1 1;
1 5 5 1 1;
2 1 5 1 1;
2 2 4 1 1;
2 3 4 1 1;
2 4
3 1 1;
2 5 2 1 1;
3 1 5 1 1;
3 2
4 1 1;
3 3 3 1 1;
3 4 2 1 1;
3 5 2 1 1;
4 1 4 1 1;
4 2 3 1 1;
4 3 2 1 1;
4 4 2 1 1;
4 5 1 1 1;
5 1 1 1 1;
5 2 1 1 1;
5 3 1 1 1;
5 4 1 1 1;
5 5 1 1 1;]
a=addrule(a,rulelist); %添加模糊规则函数
showrule(a) %显示模糊规则函数
a1=setfis(a,'DefuzzMethod','centroid'); %设置模糊系统特性writefis(a1,'fuzzf'); %保存模糊系统
a2=readfis('fuzzf'); %从磁盘读出保存的模糊系统
disp('fuzzy Controller table:e=[-5,+5],ec=[-10,+10]');%显示矩阵和数组内容
Ulist=zeros(5,5); %全零矩阵
for i=1:5
for j=1:5
e(i)=-4+i;
ec(j)=-4+j;
Ulist(i,j)=evalfis([e(i),ec(j)],a2); %完成模糊推理计算
end
end
Ulist=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=0
for k=1:1:300
time(k)=k*ts;
rin(k)=40;
U(k)=evalfis([e_1,ec_1],a2);
%完成模糊推理计算Yout(k)=-den(2)*Y_1+num(2)*U_5;