模糊控制笔记-转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建立

  1. Fuzzy过程,就是针对输入变量的测量值,根据实际工程需要选取合适的论域范围,病分为几种可能的情况选取几个语言变量值,从而对输入变量进行量化,每个语言变量可以选用某种隶属度函数来表示。
  2. 建立规则表,就是根据控制过程中的实际经验,依照推理合成法或启发发建立一系列规则,组成规则表
  3. 输出信息的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)

posted @ 2019-09-18 19:41  温酒待君归  阅读(476)  评论(0编辑  收藏  举报
levels of contents