MATLAB水箱液位模糊控制仿真程序

MATLAB水箱液位模糊控制仿真程序

题目

以水位的模糊控制为例,设有一个水箱,通过调节阀门可向内注水和向外抽水,设计一个模糊控制器,通过调节阀门将水位稳定在固定点附近,按照日常的操作经验,可以得到基本的控制规则为:
“若水位高于O点,则向外排水,差值越大,排水越快”;
“若水位低于O点,则向内注水,差值越大,注水越快”
MATLAB水箱液位模糊控制仿真程序_第1张图片实验内容:

  1. 选择液位差为e,分为5个模糊集:NB:负大 NS:负小 Z:零 PS:正小 PB:正大,将偏差e的变化分为7个等级:-3,-2,-1,0,1,2,3
  2. 控制量u:分为5个模糊集:NB:负大 NS:负小 Z:零 PS:正小 PB:正大,将偏差e的变化分为7个等级:-4,-3,-2,-1,0,1,2,3,4
  3. 水位变化e划分表:
    MATLAB水箱液位模糊控制仿真程序_第2张图片
  4. 模糊规则的描述
    若e负大,则u负大
    若e负小,则u负小
    若e为零,则u为零
    若e正小,则u正小
    若e正大,则u正大
  5. 求迷糊关系
  6. 模糊决策
  7. 控制量的反模糊化
    模糊控制响应表
    在这里插入图片描述

完整代码

clear all;
close all;
a=newfis('fuzz-tank');%创建一个模糊推理系统(FIS%水位变化e划分,NB:负大 NS:负小 Z:PS:正小 PB:正大
a=addvar(a,'input','e',[-3,3]);%向模糊推理系统中添加语言变量
a=addmf(a,'input',1,'NB','zmf',[-3,-1]); %Z形隶属函数
a=addmf(a,'input',1,'NS','trimf',[-3,-1,1]);%三角形隶属函数
a=addmf(a,'input',1,'Z','trimf',[-2,0,2]);
a=addmf(a,'input',1,'PS','trimf',[-1,1,3]);
a=addmf(a,'input',1,'PB','smf',[1,3]);%S形隶属函数
%控制量u变化划分,NB:负大 NS:负小 Z:PS:正小 PB:正大
a=addvar(a,'output','u',[-4,4]);
a=addmf(a,'output',1,'NB','zmf',[-4,-1]);
a=addmf(a,'output',1,'NS','trimf',[-4,-2,1]);
a=addmf(a,'output',1,'Z','trimf',[-2,0,2]);
a=addmf(a,'output',1,'PS','trimf',[-1,2,4]);
a=addmf(a,'output',1,'PB','smf',[1,4]);
%模糊规则
%若e负大,则u负大
%若e负小,则u负小
%若e为零,则u为零
%若e正小,则u正小
%若e正大,则u正大
rulelist=[1 1 1 1;2 2 1 1;3 3 1 1;4 4 1 1;5 5 1 1];
a=addrule(a,rulelist);
a1=setfis(a,'DefuzzMethod','mom');%将DefuzzMethod属性设置为mom
writefis(a1,'tank');%保存文件到磁盘上
a2=readfis('tank');%读取模糊控制系统

figure(1);
plotfis(a2);%绘制FIS系统结构
figure(2);
plotmf(a,'input',1);
figure(3);
plotmf(a,'output',1);

flag=1;
if flag==1
    showrule(a);
    ruleview('tank');
end
disp('------------------------------------------------------');
disp('     fuzzy controller table:e=[-3,+3],u=[-4,+4]       ');
disp('------------------------------------------------------');
for i=1:1:7
    e(i)=i-4;
    Ulist(i)=evalfis([e(i)],a2);
end
Ulist=round(Ulist)%取整
e=-3;
u=evalfis([e],a2)

运行结果

MATLAB水箱液位模糊控制仿真程序_第3张图片
MATLAB水箱液位模糊控制仿真程序_第4张图片
MATLAB水箱液位模糊控制仿真程序_第5张图片MATLAB水箱液位模糊控制仿真程序_第6张图片
可以在input里面输入数字或者拉动红色的线随意选择e值
e=-1
MATLAB水箱液位模糊控制仿真程序_第7张图片e=3
MATLAB水箱液位模糊控制仿真程序_第8张图片

你可能感兴趣的:(MATLAB运筹与优化,matlab,控制器)