matlab用脚本实现模糊控制

前言

最近在学习模糊控制,遇到的一些小问题,特此记录一下。

准备

  • MATLAB R2020

参考

matlab中模糊控制

过程

参考文章中的模糊控制器已经是很老的版本了,所以我查阅了官方文档,将一些内容更新。

用Matlab中的脚本做一个简单的模糊控制,流程如下:

1、创建一个 FIS (Fuzzy Inference System ) 对象,

原来的newfis函数将在未来版本中删除,所以我们得替换成新的函数(mamfis 或者 sugfis),而newfis函数创建的FIS默认对象类型是mamdani,刚好mamfis函数默认对象类型是mamdani,所以可以直接替换。

%使用mamfis对象表示1型Mamdani模糊推理系统
fisMat = mamfis;

一般只用提供第一个参数即可,后面均用默认值。

2、增加模糊语言变量
模糊变量有两类:input 和 output。在每次增加模糊变量,都会按顺序分配一个 index,后面要通过该 index 来使用该变量。版本更新后,不再使用addvar,输入和输出都要用单独的函数来使用,如下所示

%使用一个或多个名称-值对参数配置输入\输出变量。
fisMat= addInput(fisMat,,range,Name,Value)
fisMat = addOutput(fisMat,range,Name,Value)

Value的值可以是输入的名称,所以不用特意去记index,后面只要把Value的值传进去,他就会自动排序。

3、增加模糊语言名称,即模糊集合。

%使用一个或多个名称-值对参数配置成员隶属度函数。
fisMat = addMF(fisMat,varName,type,parameters,Name,Value)

每个模糊语言名称(Name-Value)从属于一个模糊语言(varName)。Fuzzy 工具箱中没有找到离散模糊集合的隶属度表示方法,暂且用插值后的连续函数代替。(这句话不太懂,等下次更新,再来解决这个问题)

参数type即隶属度函数(Membership Functions),它可以是 Gaussmf、trimf、trapmf等,也可以是自定义的函数。

每一个语言名称也会有一个index,按加入的先后顺序得到,从 1 开始。(这里版本更新后,没有了varIndex,只要Value的值对应相同,它就会按加入的先后顺序开始)

4、增加控制规则,即模糊推理的规则。

%将筛选规则添加到指定的筛选。
fisMat = addRule(fisMat,rulelist);
%rulelist的各个参数
rulelist[first input;second input;first output;Rule weight;Fuzzy operator]
  • first input:第一个输入变量的索引
  • second input:第二个输入变量的索引
  • first output:第一个输出变量的索引
  • Rule weight:规则权重([0,1])
  • Fuzzy operator:操作符(1表示AND,2表示OR,负数代表NOT)

其中 rulelist 是一个矩阵,每一行为一条规则。
假定该 FIS 有 M个输入和 N 个输出,则每行有 M+N+2 个元素,前 M 个数分别表示 M 个输入变量的某一个语言名称的 index,没有的话用 0 表示,后面的 N个数也类似。以文末的代码为例

rulelist = [1 1 1 1;2 2 1 1];

第一行表示的是

If (E is small) , then (U is small).
%选择输入第一个索引,输出第一个索引,权重为1,操作符为AND

第二行表示的是

If (E is big) , then (U is big).
%选择输入第二个索引,输出第二个索引,权重为1,操作符为AND

注意,rulelist矩阵的最后两个一定是权重和操作符

举个例子,输入变量有两个语言名称(A,B),输出变量有四个语言名称(C,D,E,F)

If A and B , then C and D.
%[1 2 1 2 1 1]

If A , then F.
%[1 0 4 1 1]

5、给定输入,得到输出,即进行模糊推理。

%评估输入中输入值的模糊推理系统fisMat,并在输出中返回结果输出值
output = evalfis(fisMat,input)

其中 fisMat为前面建立的那个 FIS 对象。

一个完整的例子如下:

%模糊控制器实现示例
clear all;
fisMat = mamfis;

fisMat = addInput(fisMat,[0 7],'Name',"E");
fisMat = addMF(fisMat,'E','trimf',[0 1 4.333],'Name','small');
fisMat = addMF(fisMat,'E','trimf',[1.6667 6 7],'Name','big');

fisMat = addOutput(fisMat,[0 7],'Name',"U");
fisMat = addMF(fisMat,'U','trimf',[0 1 4.333],'Name','small');
fisMat = addMF(fisMat,'U','trimf',[1.6667 6 7],'Name','big');

rulelist = [1 1 1 1;2 2 1 1];
fisMat = addRule(fisMat,rulelist);

u = evalfis(fisMat,4)

在这里插入图片描述

赠人玫瑰,手有余香。点个赞啦!

  • 30
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
一个完整的模糊控制实现Matlab代码示例如下: ``` %模糊控制实现示例 clear all; fisMat = mamfis; fisMat = addInput(fisMat,[0 7],'Name',"E"); fisMat = addMF(fisMat,'E','trimf',[0 1 4.333],'Name','small'); fisMat = addMF(fisMat,'E','trimf',[1.6667 6 7],'Name','big'); fisMat = addOutput(fisMat,[0 7],'Name',"U"); fisMat = addMF(fisMat,'U','trimf',[0 1 4.333],'Name','small'); fisMat = addMF(fisMat,'U','trimf',[1.6667 6 7],'Name','big'); rulelist = [1 1 1 1;2 2 1 1]; fisMat = addRule(fisMat,rulelist); u = evalfis(fisMat,4) ``` 这段代码实现了一个模糊控制器。首先,我们创建一个mamfis对象,并添加输入和输出变量。在这个例子中,输入变量"E"的范围是0到7,输出变量"U"的范围也是0到7。然后,我们定义了输入和输出变量的隶属函数,例如"small"和"big"。接下来,我们定义了模糊规则列表,并将其添加到模糊控制器中。最后,我们使用evalfis函数来计算输入值为4时的模糊输出。 以上就是一个简单的模糊控制算法的Matlab代码示例。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [智能算法:Galaxy Gravity Optimization Algorithm (GGO)星系引力优化算法Matlab](https://download.csdn.net/download/weixin_39168167/88275205)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [matlab脚本实现模糊控制](https://blog.csdn.net/qq_36262908/article/details/126772444)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [【路径规划】基于模糊控制的路径规划算法附Matlab代码](https://blog.csdn.net/Matlab_dashi/article/details/130202911)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值