MATLAB模糊控制仿真程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

相关文档
最新文档