马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
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',[0 2 3 5]);
fs=addmf(fs,'input',1,'PB','trapmf',[3 5 6 6]);
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',[0 2 3 5]);
fs=addmf(fs,'input',2,'PB','trapmf',[3 5 6 6]);
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',[0 1 2]);
fs=addmf(fs,'output',1,'PB','trapmf',[1 2 3 3]);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%模糊规则库(未计算)
rr=[5 5 4 4 3; 5 4 4 3 3; 4 4 3 3 2; 4 3 3 2 2; 3 3 2 2 1];
k=1;r1=zeros(prod(size(rr)),3);
for i=1:size(rr,1)
for j=1:size(rr,2)
r1(k,:)=[i,j,rr(i,j)]; k=k+1;
end
end
[r s]=size(r1);r2=ones(r,2);rulelist=[r1,r2];
fs=addrule(fs,rulelist);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%模糊控制仿真
%被控系统建模
num=[20];den=[1.6 4.4 1];[A B C D]=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=[0;0];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=[e1 de1];
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=[1:N]*T;
figure(2)
plot(TT,yy,'r');grid on
legend('fuzy')
|