一、简介

MATLAB软件有提供一个模糊推理系统编辑器,利用模糊工具箱在matlab命令窗口输入Fuzzy命令进入模糊控制编辑环境

二、主要步骤

1、接受输入变量

2、输入变量模糊化

3、利用模糊规则进行推理得出结论

4、综合步骤3利用结论从模糊隶属度得到实际的输出值

5、输出结果

三、MATLAB运行结果

 输入 e 的模糊语言变量及其隶属度函数:

 输入 ec 的模糊语言变量及其隶属度函数:

 

 输出结果:

四、总结

在本次实验中设置了两个模糊输入变量(e和ec),一个模糊输出变量u 。在规则库中建立了7x7=49条规则,模糊规则中第一个和第二个为输入,第三个数表输出,后俩个数分别是规则权重和AND OR选项。模糊变量的隶属函数分别设置成了“Z型”、“三角形”、“S型”

五、代码部分

%模糊控制器设计
a=newfis('fuzzf'); %创建新的模糊推理系统 %输入1
f1=;
a=addvar(a,'input','e',[-*f1,*f1]);
%添加 e 的模糊语言变量
a=addmf(a,'input',,'NB','zmf',[-*f1,-*f1]);
%添加 e 的模糊语言变量的隶属度函数(z型)
a=addmf(a,'input',,'NM','trimf',[-*f1,-*f1,-]);
%隶属度函数为三角形
a=addmf(a,'input',,'NS','trimf',[-*f1,-*f1,*f1]);
a=addmf(a,'input',,'Z','trimf',[-*f1,,*f1]);
a=addmf(a,'input',,'PS','trimf',[-*f1,*f1,*f1]);
a=addmf(a,'input',,'PM','trimf',[,*f1,*f1]);
a=addmf(a,'input',,'PB','smf',[*f1,*f1]); %输入2
f2=;
a=addvar(a,'input','ec',[-*f2,*f2]);
%添加 ec 的模糊语言变量
a=addmf(a,'input',,'NB','zmf',[-*f2,-*f2]);
a=addmf(a,'input',,'NM','trimf',[-*f2,-*f2,-]);
a=addmf(a,'input',,'NS','trimf',[-*f2,-*f2,*f2]);
a=addmf(a,'input',,'Z','trimf',[-*f2,,*f2]);
a=addmf(a,'input',,'PS','trimf',[-*f2,*f2,*f2]);
a=addmf(a,'input',,'PM','trimf',[,*f2,*f2]);
a=addmf(a,'input',,'PB','smf',[*f2,*f2]); %输出
f8=1.5;
a=addvar(a,'output','u',[-*f8,*f8]);
%添加 u 的模糊语言变量
a=addmf(a,'output',,'NB','zmf',[-*f8,-*f8]);
a=addmf(a,'output',,'NM','trimf',[-*f8,-*f8,-]);
a=addmf(a,'output',,'NS','trimf',[-*f8,-*f8,*f8]);
a=addmf(a,'output',,'Z','trimf',[-*f8,,*f8]);
a=addmf(a,'output',,'PS','trimf',[-*f8,*f8,*f8]);
a=addmf(a,'output',,'PM','trimf',[,*f8,*f8]);
a=addmf(a,'output',,'PB','smf',[*f8,*f8]); %规则库
rulelist=[ ; %编辑模糊规则,后俩个数分别是规则权重和AND OR选项
;
;
;
;
;
; ;
;
;
;
;
;
; ;
;
;
;
;
;
; ;
;
;
;
;
;
; ;
;
;
;
;
;
; ;
;
;
;
;
;
; ;
;
;
;
;
;
;
]; a=addrule(a,rulelist); %添加模糊规则函数
showrule(a) %显示模糊规则函数
a1=setfis(a,'DefuzzMethod','centroid'); %设置解模糊方法
writefis(a1,'fuzzf'); %保存模糊系统
a2=readfis('fuzzf'); %从磁盘读出保存的模糊系统
disp('fuzzy Controller table:e=[-3,+3],ec=[-3,+3]');%显示矩阵和数组内容 %推理
Ulist=zeros(,); %全零矩阵
for i=:
for j=:
e(i)=-+i;
ec(j)=-+j;
Ulist(i,j)=evalfis([e(i),ec(j)],a2); %完成模糊推理计算
end
end
% Ulist=ceil(Ulist) %朝正无穷方向取整
Ulist %朝正无穷方向取整 %画出模糊系统
figure(); plotfis(a2);
figure();plotmf(a,'input',);
figure();plotmf(a,'input',);
figure();plotmf(a,'output',);

MATLAB实现模糊控制的更多相关文章

  1. 用MATLAB生成模糊控制离线查询表

    实时采样得到的数据经过模糊化处理后输入机器,通过查询模糊规则表便可得到应有的输出模糊量,从而避免了近似推理过程.实际应用中,特别是在控制系统较为简单而采用单片机控制时,常常采用这种查表法. 模糊控制表 ...

  2. 如何将Matlab中“模糊控制设计器”的隶属度函数导出图片(figure)

    如何将Matlab中"模糊控制设计器"的隶属度函数导出图片(figure)详情参考matlab官方帮助手册:plotmf()函数https://www.mathworks.com/ ...

  3. 使用MATLAB生成模糊控制的离线查询表

    1.打开模糊控制工具箱,编辑输入输出变量的隶属度函数和模糊控制规则,如下图所示,导出为fuzzy_control.fis文件. 2.打开Simulink模块,建立下图所示的系统框图,两输入,一输出,处 ...

  4. matlab中使用fuzzy工具箱

    4步教你学会使用matlab模糊控制工具箱 Matlab模糊控制工具箱为模糊控制器的设计提供了一种非常便捷的途径,通过它我们不需要进行复杂的模糊化.模糊推理及反模糊化运算,只需要设定相应参数,就可以很 ...

  5. 如何使用Simulink模糊控制

    在用这个控制器之前,需要用readfis指令将fuzzy1.fis加载到matlab的工作空间,比如我们用这样的指令:fis1=readfis(‘fis1.fis’):就创建了一个叫myFLC的结构体 ...

  6. 基于MATLAB的单级倒立摆仿真

    有关代码及word文档请关注公众号“浮光倾云”,后台回复A010.02即可获取 一.单级倒立摆概述 倒立摆是处于倒置不稳定状态,人为控制使其处于动态平衡的一种摆,是一类典型的快速.多变量.非线性.强耦 ...

  7. 控制算法的划分(自适应控制、预测控制、模糊控制等,PID等;蚁群算法、神经网络,还有机器学习、人工智能中的很多方法)

    一般来说,控制器的设计,分为控制框架的选取,跟参数的优化.自适应控制.预测控制.模糊控制等,跟PID一样,是控制算法(我习惯称为控制框架). 而粒子群.遗传算法(类似的还有蚁群算法.神经网络,还有机器 ...

  8. Matlab 绘制三维立体图(以地质异常体为例)

    前言:在地球物理勘探,流体空间分布等多种场景中,定位空间点P(x,y,x)的物理属性值Q,并绘制三维空间分布图,对我们洞察空间场景有十分重要的意义. 1. 三维立体图的基本要件: 全空间网格化 网格节 ...

  9. Matlab slice方法和包络法绘制三维立体图

    前言:在地球物理勘探,流体空间分布等多种场景中,定位空间点P(x,y,x)的物理属性值Q,并绘制三维空间分布图,对我们洞察空间场景有十分重要的意义. 1. 三维立体图的基本要件: 全空间网格化 网格节 ...

随机推荐

  1. GraphQL实战篇(一)

    看过基础篇的都知道,GraphQL创建Schema有两种方式,Schema First和Graph Type,前者使用GraphQL Schema Language类似于EF的DB First:后者和 ...

  2. 1、java集合:java集合详解及类关系图

    List和Set继承自Collection接口. Set无序不允许元素重复.HashSet和TreeSet是两个主要的实现类. List有序且允许元素重复,支持null对象.ArrayList.Lin ...

  3. RMQ((Range Minimum/Maximum Query))ST算法

    给定一个数组,求出给定区间[l,r]中元素的最大值或最小值或者最值的索引. 一看到这个题目,简单,看我暴力出奇迹.暴力当然是可行的.但是时间复杂度很高(O(n^2)).线段树,树状数组也可以解决这个问 ...

  4. (详细)JAVA使用JDBC连接MySQL数据库(3)-代码部分

    欢迎任何形式的转载,但请务必注明出处. 本节主要内容 项目建立 数据库连接 数据库操作 主函数 点击进入推荐博客(必看) 一.项目建立 如图所示:新建Java Project.Package.Clas ...

  5. Java 之 Collections 工具类

    一.Collections 概述 java.utils.Collections 是集合工具类,用来对集合进行操作. 二.常用方法 public static <T> boolean add ...

  6. iOS圆弧渐变进度条的实现

    由于项目需要一个环形渐变进度条显示课程,这方便网上的确有很多相关资料但是,都是比较零散的而且,大多数只是放一堆代码就算完了.这里我想详细写一篇我自己实现这个进度条的过程. 实现一个圆弧进度条主要分为三 ...

  7. linux文件系统初学

    Linux磁盘分区和目录 Linux发行版之间的差别很小,差别主要表现在系统管理的特色工具以及软件包管理方式的不同. Windows的文件结构是多个并列的树状结构,最顶部是不同的磁盘(分区),如C,D ...

  8. centos 升级glibc-2.17

    wget http://copr-be.cloud.fedoraproject.org/results/mosquito/myrepo-el6/epel-6-x86_64/glibc-2.17-55. ...

  9. 记录一次OOM排查经历

    我是用了netty搭建了一个UDP接收日志,堆启动配置 Xmx256  Xms256 ,项目刚启动的时候,系统进程占用内存很正常,在250M左右. 长时间运行之后发现,进程占用内存不断增长,远远超过了 ...

  10. python链接sql server 乱码问题

    import pymssql import sys import os reload(sys) sys.setdefaultencoding('utf-8') os.environ['NLS_LANG ...