声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1534|回复: 4

[线性振动] 振动系统模糊控制Fuzzy

[复制链接]
发表于 2011-10-30 10:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

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

























回复
分享到:

使用道具 举报

发表于 2012-6-1 07:14 | 显示全部楼层
回复 1 # 博大广阔 的帖子

模糊规则库(未计算)
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

楼主,其中的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',[1 2 3 3]);)
 楼主| 发表于 2012-6-1 10:49 | 显示全部楼层
其实啊。。你画个e与de关于U的表格的关系,你就会很清楚这个rr代表什么意思了。感谢的你的提问。。让我觉得我发帖还有价值!!谢谢
发表于 2012-6-4 11:03 | 显示全部楼层
回复 4 # 博大广阔 的帖子

多谢,帖子当然有价值了!
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-29 11:50 , Processed in 0.065034 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表