模糊控制——创建与添加自定义的隶属函数

关键字:模糊控制;隶属函数;Matlab。

系列文章目录

模糊控制——(一)理论基础
模糊控制——(二)设计流程
模糊控制——(三)模糊洗衣机
模糊控制——(四)模糊自适应整定PID控制
模糊控制——(五)Sugeno模糊模型
模糊控制——创建与添加自定义的隶属函数


文章目录

  • 系列文章目录
  • 前言
  • 一、工程环境
  • 二、创建自定义隶属函数
  • 三、添加自定义隶属函数
  • 总结


前言

  前些天有小伙伴对如何创建并添加自定义隶属函数有一些问题,故有此文进行一些问题答复。


一、工程环境

  以下的案例基于:

  • PC操作系统:WIN11
  • MATLAB:2019a

二、创建自定义隶属函数

  首先在命令行输入help addmf
Alt

图2.1 在命令行窗口中addmf

在addmf的帮助文档中,可以看到隶属函数也支持自定义的算法,可使用自定义算法的字符串名称字符向量名称函数句柄(对于函数句柄不太明白的小伙伴可以走传送门——函数句柄传送门)。
Alt

图2.2 addmf参考页

在addmf参考页点击Build Fuzzy Systems Using Custom Functions,如图2.3转跳的参考页提供了自定义隶属函数的模板:
Alt

图2.3 自定义隶属函数的模板

如图函数的形参有两个xparams分别是绘图时的很坐标向量函数生成时需要的参数,在上述案例中params就是一个有八个元素的向量,其产生的函数效果如图2.4:
Alt

图2.4 模板隶属函数的图形

根据模板上隶属函数的定义形式创建一个脉冲函数:

% 模糊函数在范围内的横坐标向量不一定包含我们需求的点
% 比如x=5:1:10,params=2.1
% 故我们选择距离我们需求点最近的一个点当作脉冲产生点
function res=Func_ImpulseMF(x,params)y=zeros(1,length(x));% 当前脉冲产生点不在范围内    if params<x(1)||params>x(length(x))res=zeros(1,length(x));return;end% 当前脉冲产生点在范围内min=abs(x(1)-params);                                                    % 横坐标与脉冲产生点的最小距离set=1;                                                                  % 与脉冲产生点最近的横坐标位置for k=2:1:length(x)% 当前点与脉冲产生点的距离更近if abs(x(k)-params)<min% 更新标记点set=k;% 更新最小距离min=abs(x(k)-params);endend% 在标记的点处产生脉冲for k=1:1:length(x)if k==sety(k)=1;elsey(k)=0;endendres=y;
end

三、添加自定义隶属函数

  首先需要保证,自定义隶属函数文件与模糊控制程序文件在同一路径下:
Alt

图3.1 文件路径

创建一个模糊接口系统,并添加自定义隶属函数:

clc;
clear;
close all;
% t=-5:0.1:5;
% impulse1=t==0;
% figure(1);
% plot(t,impulse1);
% figure(2);
% impulse2=t==2;
% stem(t,impulse2);% Use a mamfis object to represent a Mamdani fuzzy inference system
% newfis指令未来将被移除 详情通过help newfis参见帮助页
% a=newfis('fuzz tank');
% a=mamfis('Name','fuzz tank');
a=mamfis();
a.Name='fuzz tank';
%%
% 创建模糊函数
% addvar未来将被移除 详情通过help addvar参见帮助页
% a=addvar(a,'input','e',[-3,3]);
a=addInput(a);
%%
% 创建第一个输入模糊变量与隶属度函数
a.Input(1).Name='e';
a.Input(1).Range=[-3,3];
a=addMF(a,'e','zmf'  ,[-3,-1]    ,'Name','NB');
a=addMF(a,'e','trimf',[-3,-1,1],'Name','NS');
a=addMF(a,'e','trimf',[-2,0,2]   ,'Name','Z' );
a=addMF(a,'e','trimf',[-1,1,3] ,'Name','PS');
a=addMF(a,'e','smf'  ,[1,3]      ,'Name','PB');
figure(3);
plotmf(a,"input",1);
%%
% 创建第二个输入模糊变量与隶属度函数
% a=addvar(a,'input','ec',[-4,4]);
a.Output(1).Name='u';
a.Output(1).Range=[-4,4];
a=addMF(a,'u','zmf'  ,[-4,-1]    ,'Name','NB');
a=addMF(a,'u','trimf',[-4,-2,1]  ,'Name','NM');
a=addMF(a,'u','trimf',[-2,0,2]   ,'Name','Z' );
a=addMF(a,'u','trimf',[-1,2,4] ,'Name','PS');
a=addMF(a,'u','Func_ImpulseMF',3,'Name','PB');
figure(4);
plotmf(a,"output",1);

注意这里a.Output(1).Range=[-4,4]为模糊接口系统添加输出的范围,同时会自动生成一个绘图时的横坐标向量,也就是我们自定义隶属函数里需要的参数xa=addMF(a,'u','Func_ImpulseMF',3,'Name','PB');其中的参数3就是自定义隶属函数里需要的参数params。运行后得到图像:
Alt

图3.2 自定义隶属函数添加成功

由图3.2可知,产生脉冲的点不是我们期望的x=3,原因就是模糊接口系统生成在 x = [ − 4 , 4 ] x=[-4,4] x=[4,4]范围的横坐标向量时,不包括 x = 3 x=3 x=3这个点,故我们的程序在x=2.9778处产生了脉冲。


总结

  本文针对如何创建与添加自定义隶属函数给出了流程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/404581.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL— DDL语句学习【后端 9】

SQL— DDL语句学习 在数据管理的广阔领域中&#xff0c;SQL&#xff08;Structured Query Language&#xff09;作为操作关系型数据库的编程语言&#xff0c;扮演着举足轻重的角色。它不仅定义了操作所有关系型数据库的统一标准&#xff0c;还为我们提供了强大的工具来管理、查…

jenkins最佳实践(二):Pipeline流水线部署springCloud微服务项目

各位小伙伴们大家好呀&#xff0c;我是小金&#xff0c;本篇文章我们将介绍如何使用Pipeline流水线部署我们自己的微服务项目&#xff0c;之前没怎么搞过部署相关的&#xff0c;以至于构建流水线的过程中中也遇到了很多自己以前没有考虑过的问题&#xff0c;特写此篇&#xff0…

【Redis】数据类型详解及其应用场景

目录 Redis 常⻅数据类型预备知识基本全局命令小结 数据结构和内部编码单线程架构引出单线程模型为什么单线程还能这么快 Redis 常⻅数据类型 Redis 提供了 5 种数据结构&#xff0c;理解每种数据结构的特点对于 Redis 开发运维⾮常重要&#xff0c;同时掌握每种数据结构的常⻅…

Postman接口测试项目实战

第 1 章 什么是接口测试 1.1、为什么要进行接口测试 目前除了特别Low的公司外&#xff0c;开发都是前后端分离的&#xff0c;就是说前端有前端的工程师进行编码&#xff0c;后端有后端的工程师进行编码&#xff0c;前后端进行数据基本都是通过接口进行交互的。 1.2、接口测…

zookeeper源码分析之事务请求处理

一.参考 zookeeper启动和选举的源码分析参考之前的帖子. 二.源码 1.职责链模式. 每次经过的processor都是异步处理&#xff0c;加入当前processor的队列&#xff0c;然后新的线程从队列里面取出数据处理. PrepRequestProcessor 检查ACL权限,创建ChangeRecord. SyncRequest…

ArcGIS空间自相关Moran‘s I——探究人口空间格局的20年变迁

先了解什么是莫兰指数&#xff1f; 莫兰指数&#xff08;Morans I&#xff09;是一种用于衡量空间自相关性的统计量&#xff0c;即它可以帮助我们了解一个地理区域内的观测值是否彼此相关以及这种相关性的强度和方向。 莫兰指数分类&#xff1a; 全局莫兰指数 (Global Moran…

聊聊如何利用ingress-nginx实现应用层容灾

前言 容灾是一种主动的风险管理策略&#xff0c;旨在通过构建和维护异地的冗余系统&#xff0c;确保在面临灾难性事件时&#xff0c;关键业务能够持续运作&#xff0c;数据能够得到保护&#xff0c;从而最大限度地减少对组织运营的影响和潜在经济损失。因此容灾的重要性不言而…

zabbix实战-磁盘空间告警

1.创建监控项 选择&#xff1a;键值&#xff1a;vfs.fs.size[fs,<mode>] 。 直接写 vfs.fs.size[fs,<mode>]是不出数据的。我们要写具体的值 &#xff1a;vfs.fs.size[/,free] &#xff0c;这个表示查看根的剩余空间。 2.创建图形 为磁盘剩余空间监控项创建图形&am…

redis 遍渐进式历

1.scan cursor [match pattern] [coutn] [type]:以渐进式的方式进行建的遍历 cursor:是光标 指向当前遍历的位置 设置成0表示当前从0开始获取 math parttern &#xff1a;和keys命令一样的 keys * count: 限制一次遍历能够获取到多少个 元素默认是10 type :这次遍历只想获取…

[Python学习日记-10] Python中的流程控制(if...else...)

[Python学习日记-10] Python中的流程控制&#xff08;if...else...&#xff09; 简介 缩进 单分支 双分支 多分支 练习 简介 假如把写程序比做走路&#xff0c;那我们到现在为止&#xff0c;一直走的都是直路&#xff0c;还没遇到过分叉口&#xff0c;想象现实中&#x…

【python】Python实现XGBoost算法的详细理论讲解与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

Python编码系列—Python数据可视化:Matplotlib与Seaborn的实战应用

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

Ps:首选项 - 单位与标尺

Ps菜单&#xff1a;编辑/首选项 Edit/Preferences 快捷键&#xff1a;Ctrl K Photoshop 首选项中的“单位与标尺” Units & Rulers选项卡允许用户根据工作需求定制 Photoshop 的测量单位和标尺显示方式。这对于保持工作的一致性和精确性&#xff0c;尤其是在跨设备或跨平台…

专题--自底向上的计算机网络(物理层)

目录 计算机网络概述 物理层 数据链路层 网络层 运输层 应用层 网络安全 详细见http://t.csdnimg.cn/MY5aI http://t.csdnimg.cn/8Ipa4 http://t.csdnimg.cn/uvMxS 信道复用技术不仅在物理层有运用&#xff0c;在数据链路层也确实需要信道复用技术。‌ 数据链路层是…

第N8周:使用Word2vec实现文本分类

本文为365天深度学习训练营 中的学习记录博客原作者&#xff1a;K同学啊 一、数据预处理 任务说明: 本次将加入Word2vec使用PyTorch实现中文文本分类&#xff0c;Word2Vec 则是其中的一种词嵌入方法&#xff0c;是一种用于生成词向量的浅层神经网络模型&#xff0c;由Tomas M…

隐语隐私计算实训营「数据分析」第 5 课:隐语PSI介绍及开发实践

深入理解隐语(SecretFlow)中的PSI技术 隐私集合求交(Private Set Intersection, PSI)是隐私计算中的一个重要技术,它允许多方在不泄露自己数据的前提下找出共同的数据交集。在本文中,我们将深入探讨SecretFlow(隐语)中PSI的实现和应用。 PSI的基本概念 PSI是一种特殊的安全多…

鸿蒙内核源码分析(时钟任务篇)

时钟概念 时间是非常重要的概念&#xff0c;我们整个学生阶段有个东西很重要,就是校园铃声. 它控制着上课,下课,吃饭,睡觉的节奏.没有它学校的管理就乱套了,老师拖课想拖多久就多久,那可不行,下课铃声一响就是在告诉老师时间到了,该停止了让学生HAPPY去了. 操作系统也一样&…

php源码编译与初始化

1 php源码编译 解压 yum install -y bzip2 # 安装解压工具 tar -xf php-7.4.12.tar.bz2 # 解压文件./condigure ./configure --prefix/usr/local/php --with-config-file-path/usr/local/php/etc --enable-fpm --with-fpm-usernginx --with-fpm-groupnginx --with-curl --wi…

线程面试题

1.JDK自带的线程池有哪些&#xff1f; 2.线程池中核心线程数与最大线程数与缓冲任务队列的关系&#xff1f; 先使用核心线程执行任务。 当核心线程不足时&#xff0c;新任务入队列等待。 当队列满且线程数未达最大值时&#xff0c;增加非核心线程执行任务。 当队列满且线程…

Leetcode每日刷题之209.长度最小的子数组(C++)

1.题目解析 根据题目我们知道所给的数组均是正整数&#xff0c;我们需要找到的是该数组的子数组&#xff0c;使其子数组内所有元素之和大于或等于给出的目标数字target&#xff0c;然后返回其长度&#xff0c;最终找出所以满足条件的子数组&#xff0c;并且要返回长度最小的子数…