振动系统模糊控制Fuzzy
clcclear all
%%%模糊控制
%定义输入输出变量及其隶属函数
fs=newfis('fuzzy','mamdani');
fs=addvar(fs,'input','e',[-6 6]);%定义输入和输出的模糊变量语言和论域
fs=addvar(fs,'input','de',[-6 6]);
fs=addvar(fs,'output','u',[-3 3]);
fs=addmf(fs,'input',1,'NB','trapmf',[-6 -6 -5 -3]); %定义e的模糊分割和每个分割大的隶属度函数
fs=addmf(fs,'input',1,'NS','trapmf',[-5 -3 -2 0]);
fs=addmf(fs,'input',1,'ZR','trimf',[-2 0 2]);
fs=addmf(fs,'input',1,'PS','trapmf',);
fs=addmf(fs,'input',1,'PB','trapmf',);
fs=addmf(fs,'input',2,'NB','trapmf',[-6 -6 -5 -3]);%定义de的模糊分割和每个分割大的隶属度函数
fs=addmf(fs,'input',2,'NS','trapmf',[-5 -3 -2 0]);
fs=addmf(fs,'input',2,'ZR','trimf',[-2 0 2]);
fs=addmf(fs,'input',2,'PS','trapmf',);
fs=addmf(fs,'input',2,'PB','trapmf',);
fs=addmf(fs,'output',1,'NB','trapmf',[-3 -3 -2 -1]); %定义u的模糊分割和每个分割大的隶属度函数
fs=addmf(fs,'output',1,'Ns','trimf',[-2 -1 0]);
fs=addmf(fs,'output',1,'ZR','trimf',[-1 0 1]);
fs=addmf(fs,'output',1,'PS','trimf',);
fs=addmf(fs,'output',1,'PB','trapmf',);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%模糊规则库(未计算)
rr=;
k=1;r1=zeros(prod(size(rr)),3);
for i=1:size(rr,1)
for j=1:size(rr,2)
r1(k,:)=; k=k+1;
end
end
=size(r1);r2=ones(r,2);rulelist=;
fs=addrule(fs,rulelist);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%模糊控制仿真
%被控系统建模
num=;den=;=tf2ss(num,den);
%系统参数
T=0.01;tao=0.02; h=T;Nd=tao/T;Umin=0.07;Umax=0.7;N=800;R=1.5*ones(1,N);
Ke=10;Kd=2.5;Kc=0.01;Ku=0.8;
X=;e=1.5;de=0;ie=0;
for k=1:N
e1=Ke*e;de1=Kd*de; %尺度变换
if e1>=6;e1=6;else e1<=-6;e1=-6;end %保证全局性,超出部分设为6
if de1>=6;de1=6;else de1<=-6;de1=-6;end
in=;
uu=evalfis(in,fs,100)-Kc*ie;
if abs(uu)<Umin;
uu=0;
elseif abs(uu)>Umax
uu=sign(uu)*Umax;
end
K1=A*X+B*uu;K2=A*(X+h*K1/2)+B*uu;K3=A*(X+h*K2/2)+B*uu; K4=A*(X+h*K3)+B*uu;
X=X+(h/6)*(K1+K2*2+2*K3+K4);
y=C*X+D*uu;
yy(1,k)=y;
eold=e;e=y-R(1,k);de=(e-eold)/T;ie=ie+e*T;
ee(k,:)=e;
end
TT=*T;
figure(2)
plot(TT,yy,'r');grid on
legend('fuzy')
回复 1 # 博大广阔 的帖子
模糊规则库(未计算)
rr=;
k=1;r1=zeros(prod(size(rr)),3);
for i=1:size(rr,1)
for j=1:size(rr,2)
r1(k,:)=; k=k+1;
end
end
楼主,其中的rr矩阵的作用是什么?
那还模糊规则表中输出量的模糊集。举个例子:第一行第一列的5 :代表:假如第一输入变量是 e是NB(=addmf(fs,'input',1,'NB','trapmf',[-6 -6 -5 -3]); %定义e的模糊分割和每个分割大的隶属度函数,对应的写在输入中的第一行)且de是NB(fs=addmf(fs,'input',2,'NB','trapmf',[-6 -6 -5 -3]);%定义de的模糊分割和每个分割大的隶属度函数
,对应着第二个输入的第二行);则输出为第5个模糊子集PB(fs=addmf(fs,'output',1,'PB','trapmf',);) 其实啊。。你画个e与de关于U的表格的关系,你就会很清楚这个rr代表什么意思了。感谢的你的提问。。让我觉得我发帖还有价值!!谢谢 回复 4 # 博大广阔 的帖子
多谢,帖子当然有价值了!
页:
[1]