模糊控制笔记-转Matlab在模糊控制中的应用
模糊逻辑工具箱函数
模糊逻辑工具箱简介
按照主题,工具箱可以分为:GUI(图形用户界面),隶属度函数,FIS(模糊推理系统)数据结构管理、先进技术、simulink仿真、模糊系统演示程序、其他函数。
表 1 GUI 图形用户界面工具
函数 | 功能 | 函数 | 功能 |
---|---|---|---|
anfisedit | 打开ANFIS编辑器GUI | ruleedit | 规则编辑器和解析器 |
fuzzy | 调用基本的FIS编辑器 | ruleview | 规则观察器和模糊推理方框图 |
mfedit | 隶属度函数编辑器 | surfview | 输出曲面观察器 |
表2 隶属度函数
函数 | 功能 | 函数 | 功能 |
---|---|---|---|
dsigmf | 由两个Sigmoid型隶属度函数之差构成的隶属度函数 | psigmf | 由两个Sigmoid型隶属度函数的积构成的隶属度函数 |
gauss2mf | 联合高斯型隶属度函数 | sigmf | Sigmoid型隶属度函数 |
gaussmf | 高斯型隶属度函数 | smf | S型隶属度函数 |
gbellmf | 广义钟型隶属度函数 | trimf | 三角型隶属度函数 |
pimf | II型隶属度函数 | zmf | Z型隶属度函数 |
表3 先进技术
函数 | 功能 | 函数 | 功能 |
---|---|---|---|
anfis | Sugeno型FIS的训练程序 | genfis2 | 使用减法聚类的方法从数据钟生成fis结构 |
FCM | 模糊C均值聚类 | subclust | 使用减法聚类的方法寻找聚类中心 |
genfis1 | 不使用数据聚类的方法从数据中生成FIS结构 |
表4 FIS数据结构管理
函数 | 功能 | 函数 | 功能 |
---|---|---|---|
addmf | 在FIS中添加隶属度函数 | parsrule | 模糊规则解析 |
addrule | 在FIS中添加规则 | plotfis | 绘图表示FIS |
addvar | 在FIS中添加变量 | plotmf | 回执给定变量的所有隶属度函数 |
defuzz | 对隶属度函数进行反模糊化 | readfis | 从磁盘中读取FIS |
evalfis | 完成模糊推理计算 | rmmf | 从FIS中删除某一变量的某一隶属度函数 |
evalmf | 通用隶属度函数的计算 | revar | 从FIS中删除某一变量 |
gensurf | 生成FIS输出曲面 | setfis | 设置模糊系统的属性 |
getfis | 获取模糊系统的特性 | showfis | 以分行的形式显示FIS结构所有属性 |
mf2mf | 在两个隶属度函数之间进行参数转换 | showrule | 显示FIS规则 |
newfis1 | 建立新的FIS | writefis | 将FIS保存磁盘 |
表5 Simulink仿真
函数 | 功能 | 函数 | 功能 |
---|---|---|---|
fuzblock | Simulink模糊逻辑控制器库 | sffis | 用于Simulink的模糊推理S-函数 |
表6 其他函数
函数 | 功能 | 函数 | 功能 |
---|---|---|---|
convertfis | FIS结构的版本变换 | mam2sug | 将Mamdanni型的FIS变换成Sugeno型FIS |
findcluster | 模糊C均值和减法聚类交换GUI | fuzdemos | 模糊逻辑工具箱演示程序列表 |
fuzarith | 完成模糊算数运算 |
表7 模糊系统演示程序
函数 | 功能 | 函数 | 功能 |
---|---|---|---|
defuzzfm | 去模糊方法 | noiedm | 自适应噪声消除 |
fcdemo | FCM聚类方法演示(二维) | slbb | 棒球控制 |
gasdemo | 使用减法聚类ANFIS演示 | slcp | 倒立摆控制 |
juggler | 魔球演示 | sltank | 水位演示 |
invkine | 机械臂倒置 | sltankrule | 带观测器的水位控制 |
irsfcm | FCM聚类演示 | sltbu | 卡车倒车控制 |
标题二
a = addrule(a,ruleList)
说明:addrule函数有两个变量,第一个变量为fis函数的变量名,第2个变量rulelist表示规则矩阵。规则列表格式:当模糊系统有m个输入,n个输出时,规则列表矩阵有m+n+2列,当前m列表示系统的输入,每列数值表示输入变量隶属度函数编号;接着n列表示系统的输出,每列的数值表示输出变量隶属度函数的编号;第m+n+1列的内容表示该条规则的权值:[0,1]之间,通常设定位1;第m+n+2列表示决定模糊操作符类型:1(模糊操作符位and)或者2(模糊操作符为or)。
其中 ruleList 是一个矩阵,每一行为一条规则,他们之间是 ALSO 的关系。
假定该 FIS 有 N 个输入和 M 个输出,则每行有 N+M+2 个元素,前 N 个数分别表示 N 个输入变量的某一个语言名称的 index,没有的话用 0 表示,后面的 M 个数也类似,最后两个分别表示该条规则的权重和各个条件的关系,1 表示 AND,2 表示 OR。
例如,当“输入1” 为“名称1” 和 “输入2” 为“名称3” 时,输出为 “ 输出1” 的“状态2”,则写为:
[1 3 2 1 1]
https://blog.csdn.net/ouyang_linux007/article/details/7586100
---恢复内容结束---
模糊推理系统FIS建立
- Fuzzy过程,就是针对输入变量的测量值,根据实际工程需要选取合适的论域范围,病分为几种可能的情况选取几个语言变量值,从而对输入变量进行量化,每个语言变量可以选用某种隶属度函数来表示。
- 建立规则表,就是根据控制过程中的实际经验,依照推理合成法或启发发建立一系列规则,组成规则表
- 输出信息的fuzzy 判决,就是通过一系列反模糊化方法对推理后所得模糊输出信息积极性反模糊化推演运算。对Mamdani型模糊推理,通常可以选择centroid(区域重心)、bisector(区域等分法)、mom(极大平均法)、som(极大最小法)、lom(极大最大)或Custom;对Sugeno型模糊推理,可以选择wtaver(加权平均法)或wtsum(加权求和)。
点击查看代码
%
a = newfis('fuzzf');
% input 1
f1 =1;
a = addvar(a,'input','e',[-6*f1,6*f1]);
% add e fuzzy inputs
a = addmf(a,'input',1,'NB','zmf',[-6*f1,-2*f1]);
%添加e的模糊语言变量隶属度函数
a = addmf(a,'input',1,'NM','trimf',[-6*f1,-4*f1,-2*f1]);
% 隶属度函数为三角形
a = addmf(a,'input',1,'NS','trimf',[-4*f1,-2*f1,0*f1]);
a = addmf(a,'input',1,'Z','trimf',[-2*f1,0*f1,2*f1]);
a = addmf(a,'input',1,'PS','trimf',[0*f1,2*f1,4*f1]);
a = addmf(a,'input',1,'PM','trimf',[2*f1,4*f1,6*f1]);
a = addmf(a,'input',1,'PB','smf',[3*f1,6*f1]);
% input 2
f2 = 1;
a = addvar(a,'input','ec',[-8*f2,8*f2]);
% 添加ec的模糊语言变量
a = addmf(a,'input',2,'NB','zmf',[-7*f2,-6*f2]);
a = addmf(a,'input',2,'NM','trimf',[-7*f2,-6*f2,-5*f2]);
a = addmf(a,'input',2,'NS','trimf',[-6*f2,-5*f2,-4*f2]);
a = addmf(a,'input',2,'Z','trimf',[-5*f2,-4*f2,-3*f2]);
a = addmf(a,'input',2,'PS','trimf',[2*f2,4*f2,6*f2]);
a = addmf(a,'input',2,'PM','trimf',[4*f2,6*f2,8*f2]);
a = addmf(a,'input',2,'PB','smf',[6*f2,8*f2]);
% output
f3 = 3;
a = addvar(a,'output','u',[-10*f3,10*f3]);
% 添加u的模糊语言变量
a = addmf(a,'output',1,'NB','zmf',[-9*f3,-4*f3]);
a = addmf(a,'output',1,'NM','trimf',[-6*f3,-2*f3,0*f3]);
a = addmf(a,'output',1,'NS','trimf',[-5*f3,-1*f3,4*f3]);
a = addmf(a,'output',1,'Z','trimf',[-4*f3,0,5*f3]);
a = addmf(a,'output',1,'PS','trimf',[-3*f3,1*f3,3*f3]);
a = addmf(a,'output',1,'PM','trimf',[1*f3,2*f3,7*f3]);
a = addmf(a,'output',1,'PB','smf',[1.5*f3,9*f3]);
% rule list
% 编辑模糊规则,后两个数分别表示规则权重和And or 选项
rulelist = [1 1 1 1 1;
1 2 1 1 1;
1 3 1 1 1;
1 4 2 1 1;
1 5 2 1 1;
1 6 3 1 1;
1 7 4 1 1;
2 1 1 1 1;
2 2 2 1 1;
2 3 2 1 1;
2 4 2 1 1;
2 5 3 1 1;
2 6 4 1 1;
2 7 5 1 1;
3 1 1 1 1;
3 2 1 1 1;
3 3 3 1 1;
3 4 2 1 1;
3 5 2 1 1;
3 6 4 1 1;
3 7 5 1 1;
4 1 1 1 1;
4 2 2 1 1;
4 3 2 1 1;
4 4 3 1 1;
4 5 2 1 1;
4 6 4 1 1;
4 7 3 1 1;
5 1 1 1 1;
5 2 1 1 1;
5 3 2 1 1;
5 4 2 1 1;
5 5 3 1 1;
5 6 4 1 1;
5 7 5 1 1;
6 1 1 1 1;
6 2 1 1 1;
6 3 3 1 1;
6 4 2 1 1;
6 5 3 1 1;
6 6 4 1 1;
6 7 5 1 1;
7 1 1 1 1;
7 2 1 1 1;
7 3 2 1 1;
7 4 3 1 1;
7 5 2 1 1;
7 6 3 1 1;
7 7 5 1 1;];
a = addrule(a, rulelist);
showrule(a)
ruleview(a)
surfview(a)
a1 = setfis(a,'DefuzzMethod','centroid'); % 设置解模糊方法
writefis(a1,'fuzzf');% 保存模糊系统
a2 = readfis('fuzzf');%从磁盘读取模糊系统
disp('fuzzy controller table: e=[-3,3],ec=[-3,3]');%显示矩阵和数组内容
%推理
Ulist = zeros(7,7); % 全零矩阵
for i=1:7
for j=1:7
e(i) = -4+i;
ec(j) = -4+j;
Ulist(i,j) = evalfis([e(i),ec(j)],a2);%完成模糊推理计算
end
end
Ulist = ceil(Ulist)
figure(1);plotfis(a2);
figure(2);plotmf(a,'input',1);
figure(3);plotmf(a,'input',2);
figure(4);plotmf(a,'output',1)