博大广阔 发表于 2011-10-30 10:06

振动系统模糊控制Fuzzy

clc
clear 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')

























stone2002_79 发表于 2012-6-1 07:14

回复 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矩阵的作用是什么?

博大广阔 发表于 2012-6-1 10:47

那还模糊规则表中输出量的模糊集。举个例子:第一行第一列的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',);)

博大广阔 发表于 2012-6-1 10:49

其实啊。。你画个e与de关于U的表格的关系,你就会很清楚这个rr代表什么意思了。感谢的你的提问。。让我觉得我发帖还有价值!!谢谢

stone2002_79 发表于 2012-6-4 11:03

回复 4 # 博大广阔 的帖子

多谢,帖子当然有价值了!
页: [1]
查看完整版本: 振动系统模糊控制Fuzzy