Pi型隶属函数(Π-shaped Membership Function)的详细介绍及python示例
我们前文已经深度解读了三角形、梯形、高斯、S型和Z型隶属函数,现在转向Pi型。当然我们先简要回顾不同隶属函数的特点和曲线效果。了解每种隶属函数的特性是为了更好的应用。
一、回顾五种隶属函数的特点
1.从每种隶属函数的结构和特点角度对比。三角形隶属函数,结构简单,计算效率高,但可能不够平滑。梯形则扩展了三角形,有更宽的顶部,适用于更广的区间,但同样可能有突变的问题。高斯函数基于正态分布,平滑且对称,适合自然现象,但计算复杂一些。S型和Z型是互补的,S型递增,Z型递减,适合单边变化,但不能处理对称或多峰的情况。
2.从优缺点角度对比。三角形需要提到简单高效,但不够灵活;梯形覆盖更广但不够平滑;高斯平滑但计算量大;S型适合单边但参数敏感;Z型类似但方向相反。以下是五种隶属函数优缺点的简单总结:
(1)三角形隶属函数
·优点:计算高效、简单直观,适合快速建模;
·缺点:隶属度变化不够平滑,无法描述宽泛区间。
详细内容可看我CSDN文章:https://lzm07.blog.csdn.net/article/details/146400949
(2)梯形隶属函数
·优点:支持更宽的隶属区间,灵活性略高于三角形;
·缺点:过渡区域仍有突变,不适用于自然渐变场景。
详细内容可看我CSDN文章:https://lzm07.blog.csdn.net/article/details/146400949
(3)高斯隶属函数
·优点:平滑对称,适合自然现象建模;
·缺点:计算复杂度较高,参数(标准差)物理意义不够直观。
详细内容可看我CSDN文章:https://lzm07.blog.csdn.net/article/details/146400949
(4)S型隶属函数
·优点:单边平滑递增,适合描述“高值”渐变;
·缺点:无法描述对称或多峰集合,参数调整敏感。
详细内容可看我CSDN文章:https://lzm07.blog.csdn.net/article/details/146439053
(5)Z型隶属函数
·优点:单边平滑递减,适合描述“低值”渐变;
·缺点:与S型类似,是S型的反向,无法覆盖对称逻辑,需结合其他函数使用。
详细内容可看我CSDN文章:https://lzm07.blog.csdn.net/article/details/146443321
3.从如何选择适合的隶属函数角度对比。实时系统可能需要计算效率高的三角形或梯形,而需要平滑处理的情况可能用高斯或S/Z型。
4.从参数调整的难易程度角度对比。三角形只能调整三个点,而梯形可以调整四个点。高斯函数的参数虽不如梯形直观,但通过标准差和均值调整比梯形灵活。S型和Z型通过斜率和中心点调整,但需要处理正负参数,可能对新手不够直观。
二、对比五种隶属函数的图形
接下来,对比三角形、梯形、高斯、S型和Z型隶属函数的图形,并将它们放在同一张图中展示,可以更直观的了解各隶属函数的不同。当然,由于这几种隶属函数的定义和参数不同,所以我们需要先确定每个函数的参数,三角形的a、b、c,梯形的a、b、c、d,高斯的中心和标准差,S型和Z型的斜率和中心点。为了图形美观,可能需要调整参数,使得各个函数在同一个x范围内(比如0到10)有部分重叠,便于比较。
例如,设定x从0到10,三角形函数的参数是a=2, b=5, c=8,梯形是a=1, b=3, c=7, d=9,高斯中心在5,标准差1.5,S型中心在3,斜率2,Z型中心在7,斜率-2。这样各个函数在图形中分布合理,不会重叠太多,又能展示各自特点。
以下是使用Python绘制三角形、梯形、高斯、S型和Z型隶属函数的综合图形代码,所有曲线在同一坐标系中展示:
import numpy as npimport matplotlib.pyplot as plt# ========================# 隶属函数定义# ========================def triangular_mf(x, a, b, c):"""三角形隶属函数"""return np.where(x <= a, 0,np.where(x <= b, (x - a)/(b - a),np.where(x <= c, (c - x)/(c - b), 0)))def trapezoidal_mf(x, a, b, c, d):"""梯形隶属函数"""return np.where(x <= a, 0,np.where(x <= b, (x - a)/(b - a),np.where(x <= c, 1,np.where(x <= d, (d - x)/(d - c), 0))))def gaussian_mf(x, center, sigma):"""高斯隶属函数"""return np.exp(-(x - center)**2 / (2 * sigma**2))def sigmoid_mf(x, slope, center):"""S型隶属函数"""return 1 / (1 + np.exp(-slope * (x - center)))def z_mf(x, slope, center):"""Z型隶属函数(S型的反向)"""return 1 - sigmoid_mf(x, slope, center)# ========================# 参数设置与计算# ========================x = np.linspace(0, 10, 1000) # X轴范围# 参数配置tri_params = (2, 5, 8) # 三角形参数 (a, b, c)trap_params = (1, 3, 7, 9) # 梯形参数 (a, b, c, d)gauss_params = (5, 1.2) # 高斯参数 (μ, σ)s_params = (2, 3) # S型参数 (k, x₀)z_params = (-2, 7) # Z型参数 (k, x₀)# 计算所有隶属度y_tri = triangular_mf(x, *tri_params)y_trap = trapezoidal_mf(x, *trap_params)y_gauss = gaussian_mf(x, *gauss_params)y_s = sigmoid_mf(x, *s_params)y_z = z_mf(x, *z_params)# ========================# 可视化设置# ========================plt.figure(figsize=(10, 6), dpi=100)# 启用数学文本渲染plt.rcParams.update({"text.usetex": False, # 不使用LaTeX(避免依赖)"mathtext.default": "regular", # 普通数学字体"font.family": "serif", # 衬线字体"font.serif": ["Times New Roman"],"axes.unicode_minus": False # 解决负号显示问题})# 绘制所有曲线(使用LaTeX语法)plt.plot(x, y_tri, lw=3,label=r'Triangular $(a=2,\ b=5,\ c=8)$')plt.plot(x, y_trap, lw=3,label=r'Trapezoidal $(a=1,\ b=3,\ c=7,\ d=9)$')plt.plot(x, y_gauss, lw=3,label=r'Gaussian $(\mu=5,\ \sigma=1.2)$')plt.plot(x, y_s, '--', lw=3,label=r'S-shaped $(k=2,\ x_0=3)$')plt.plot(x, y_z, ':', lw=3,label=r'Z-shaped $(k=-2,\ x_0=7)$')# 图形装饰plt.title('Membership Function Comparison', fontsize=14, pad=20)plt.xlabel(r'Input Value $(x)$', fontsize=12)plt.ylabel(r'Membership Degree $(\mu)$', fontsize=12)plt.legend(loc='upper right', framealpha=0.9)plt.grid(True, alpha=0.3)plt.xlim(0, 10)plt.ylim(-0.05, 1.05)# 添加辅助线plt.axhline(0, color='black', lw=0.5)plt.axhline(1, color='black', lw=0.5)plt.tight_layout()plt.show()
输出图形说明:
(1)实线:三角形(蓝色)、梯形(橙色)、高斯(绿色)
(2)虚线:S型(红色)
(3)点线:Z型(紫色)
参数设置特点:
(1)三角形(2,5,8):Triangular (a=2, b=5, c=8),展示标准对称三角形
(2)梯形(1,3,7,9):Trapezoidal (a=1, b=3, c=7, d=9),展示宽平台特性
(3)高斯(5,1.2):Gaussian (μ=5, σ=1.2),中心对称平滑曲线
(4)S型(斜率2, 中心3):S-shaped (k=2, x₀=3),左侧快速上升
(5)Z型(斜率-2, 中心7):Z-shaped (k=-2, x₀=7),右侧快速下降

三、Pi型隶属函数
经以上对比分析,我们了解到每一种隶属函数都有优缺点。接下来学习Pi型隶属函数。
Pi型隶属函数(Π-shaped Membership Function)是一种对称的隶属函数,其形状类似于希腊字母“Π”,中间区域隶属度为1,两侧通过S型或Z型函数平滑过渡到0。它常用于描述“中等范围”或“接近目标值”的模糊概念,例如“适中温度”或“正常风险”。
1. 数学定义
Pi型隶属函数通常由两个S型函数组合而成:
·左侧:递增S型函数(从0到1)。
·右侧:递减Z型函数(从1到0)。
其数学表达式为:

其中:
S(x,a,c) 是S型函数:
c:中心点,隶属度为1的区间中心。
w:控制隶属度为1的区间宽度(半宽)。
a1 ,a2:分别控制左侧和右侧曲线的陡峭程度。
2. 特点
(1)对称性:关于中心点c 对称。
(2)平滑过渡:两侧通过S型函数平滑下降到0。
(3)灵活调整:w 控制中间平坦区域的宽度。a1 ,a2控制左右两侧的陡峭程度(|a|越大,过渡越陡峭)。
(4)应用场景:适合描述对称且需要中间高隶属度的模糊集合。
3. 应用场景
(1)温度控制:定义“适中温度”区间。
(2)风险评估:描述“正常风险”范围。
(3)工业控制:设定设备运行的“理想转速区间”。
(4)图像处理:识别“中等亮度”像素。
4. Python实现与可视化
以下是生成Pi型隶属函数图的Python代码示例:
import numpy as npimport matplotlib.pyplot as pltdef sigmoid(x, a, c):"""S型函数"""return 1 / (1 + np.exp(-a * (x - c)))def pi_shaped_mf(x, c, w, a_left, a_right):"""Pi型隶属函数"""left = sigmoid(x, a_left, c - w)right = 1 - sigmoid(x, a_right, c + w)return left * right# 定义参数c = 5.0 # 中心点w = 2.0 # 半宽(隶属度为1的区间为 [c - w, c + w])a_left = 3.0 # 左侧S型斜率a_right = 3.0 # 右侧Z型斜率# 生成输入值x = np.linspace(0, 10, 1000)# 计算隶属度y = [pi_shaped_mf(t, c, w, a_left, a_right) for t in x]# 绘制图形plt.figure(figsize=(8, 4))plt.plot(x, y, label=f'Π-shaped MF: c={c}, w={w}, a_left={a_left}, a_right={a_right}')plt.title('Π-shaped Membership Function')plt.xlabel('x')plt.ylabel('Membership Degree (μ)')plt.legend()plt.grid(True)plt.show()
代码说明:
(1)函数定义:
·sigmoid:实现S型函数,用于构建Pi型函数的左侧和右侧。
·pi_shaped_mf:通过左侧S型函数和右侧Z型函数的乘积生成Pi型隶属度。
(2)参数设置:
·c = 5.0:中心点,隶属度为1的区间中心为x=5。
·w = 2.0:半宽,隶属度为1的区间为[5-2,5+2]=[3,7]。
·a_left = 3.0和a_right = 3.0:控制左右两侧的陡峭程度。
(3)运行结果:
图形在x=3到x=7之间隶属度接近1,两侧平滑下降至0。

5. 参数调整示例
(1)调整半宽w:
w = 1.0 # 隶属度为1的区间变窄([4, 6])
中间高隶属度区域缩小,两侧过渡更快。
(2)调整斜率a:
a_left = 5.0 # 左侧更陡峭a_right = 1.0 # 右侧更平缓
左侧从0到1的过渡更陡,右侧从1到0的过渡更平缓。
6. 与高斯隶属函数的对比
| 特征 | Pi型隶属函数 | 高斯隶属函数 |
| 数学形式 | S型函数组合 | 指数函数 |
| 对称性 | 对称 | 对称 |
| 计算复杂度 | 中等(涉及多个指数运算) | 中等(单指数运算) |
| 参数意义 | 中心点c、半宽w、斜率a | 中心点c、标准差σ |
| 适用场景 | 需明确平坦区间的对称模糊集合 | 自然现象中的对称模糊集合 |
7. 优缺点分析
优点:明确控制中间平坦区间的宽度(w)。两侧过渡陡峭程度可独立调整(aleft,aright)。
缺点:计算复杂度略高于高斯函数。参数较多,调整需要更多经验。
8. 实际应用案例
案例:空调系统的“适中温度”控制
(1)输入变量:温度T(范围:10°C到30°C)。
(2)Pi型参数:c=20°C,w=5°C,aleft=aright=2.0。
(3)逻辑说明:
当温度在15°C 到25°C 之间时,隶属度为1(完全属于“适中温度”)。
温度低于15°C 或高于25°C 时,隶属度平滑下降。
9. 总结
Pi型隶属函数通过组合S型和Z型函数,提供了对对称中间区域的灵活描述能力。它特别适用于需要明确平坦区间且两侧需平滑过渡的场景(如控制系统的“理想范围”)。通过调整参数c,w,a,可快速适配不同需求,是模糊逻辑工具箱中的重要组成部分。
相关文章:
Pi型隶属函数(Π-shaped Membership Function)的详细介绍及python示例
我们前文已经深度解读了三角形、梯形、高斯、S型和Z型隶属函数,现在转向Pi型。当然我们先简要回顾不同隶属函数的特点和曲线效果。了解每种隶属函数的特性是为了更好的应用。 一、回顾五种隶属函数的特点 1.从每种隶属函数的结构和特点角度对比。三角形隶属函数&am…...
MySQL 入门大全:常用函数
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…...
轻量级TLS反向代理工具TLS-reverse-proxy:打造安全通信桥梁
在数字化浪潮席卷全球的今天,数据隐私与传输安全已成为企业及个人的核心关切。TLS(传输层安全协议)作为互联网通信的"隐形卫士",承担着保护数据在传输过程中不被窃取或篡改的重要使命。然而,对于许多传统服务…...
SpringBoot3实战(SpringBoot3+Vue3基本增删改查、前后端通信交互、配置后端跨域请求、数据批量删除(超详细))(3)
目录 一、从0快速搭建SpringBoot3工程、SpringBoot3集成MyBatis、PageHelper分页查询的详细教程。(博客链接) 二、实现前端与后端通信对接数据。(axios工具) (1)安装axios。(vue工程目录) (2)封装请求工具类。(request.js) <1&…...
AF3 Rotation 类解读
Rotation 类(rigid_utils 模块)是 AlphaFold3 中用于 3D旋转 的核心组件,支持两种旋转表示: 1️⃣ 旋转矩阵 (3x3) 2️⃣ 四元数 (quaternion, 4元向量) 👉 设计目标: 允许灵活选择 旋转矩阵 或 四元数 封装了常用的 旋转操作(组合、逆旋转、应用到点上等) 像 torch.…...
JVM垃圾回收笔记02-垃圾回收器
文章目录 前言1.串行(Serial 收集器/Serial Old 收集器)Serial 收集器Serial Old 收集器相关参数-XX:UseSerialGC 2.吞吐量优先(Parallel Scavenge 收集器/Parallel Old 收集器)Parallel Scavenge 收集器Parallel Old 收集器相关参数-XX:UseParallelGC ~ -XX:UseParallelOldGC-…...
Linux上位机开发实战(编写API库)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 我们自己编写linux上位机软件的时候,尽量都是通过框架库的形式来开发。这就是所谓的低耦合,高内聚。相似的功能、模块和算法…...
深入浅出JVM性能优化:从理论到实践
一、JVM架构与内存模型深度解析 1.1 JVM运行时数据区全景图 方法区(元空间):存储类信息、常量池等元数据堆内存:对象实例存储核心区域 Young Generation(新生代) Eden区(对象诞生地࿰…...
Redis Sentinel 详解
Redis Sentinel 详解 1. 什么是 Redis Sentinel?有什么用? Redis Sentinel(哨兵) 是 Redis 官方提供的高可用性解决方案,主要用于监控、通知和自动故障转移。当 Redis 主节点(master)发生故障…...
器件功耗模型原理
器件功耗模型原理 谷歌提供了一套通用的器件耗电模型和配置方案,先对器件进行耗电因子拆解,建立器件功耗模型,得到一个器件耗电的计算公式。通过运行时统计器件的使用数据,代入功耗模型,就可以计算出器件的功耗。例如…...
拥抱成长型思维:解锁持续进步的人生密码
我强烈推荐4本可以改变命运的经典著作: 《寿康宝鉴》在线阅读白话文《欲海回狂》在线阅读白话文《阴律无情》在线阅读白话文《了凡四训》在线阅读白话文 一、什么是成长型思维? 成长型思维(Growth Mindset)由斯坦福大学心理学家卡…...
Ubuntu上查看GPU使用情况并释放内存
先用nvidia-smi查看GPU当前使用情况 再用fuser 命令查找对应显卡上占用 GPU 的进程 最后查到了用kill -9强制杀掉进程(PID)即可...
解决思科交换机无法访问局域网外设备
问题背景 有时,我们需要远程连接来管理一台思科交换机,例如使用SSH协议。然而交换机运作在链路层,这就需要交换机有一个网络层地址,来接纳基于IP协议的远程访问请求。于是,我们依靠设置一个带有IP地址的交换机虚拟接口…...
Unity Shader编程】之透明物体渲染
以下是针对您提出的关于 Unity Shader 渲染 Pass 的查看方法、多个 Pass 的影响、Pass 的含义,以及 Unity 渲染物体的流程和处理多个透明/半透明/不透明物体的详细解答。 1. Unity Shader 渲染 Pass 的查看方法 查看 Pass 的方法 通过 Shader 代码: 打开…...
fopen和open 等区别是什么?文件描述符与文件描述指针区别
FILE *fp fopen(path, "w"); int fd open(path,) 1.区别 函数定义所属库返回类型fopen高级文件操作函数,提供缓冲机制标准 C 库 (stdio.h)FILE*(文件指针)open低级文件操作函数,直接调用系统接口Unix/Linux 系统调用…...
什么是张量计算
以下是对张量计算的详细介绍,结合数学、物理学及计算机科学等多领域视角: 一、张量的基本定义与性质 1. 张量的数学定义 张量是向量空间及其对偶空间的笛卡尔积上的多重线性映射,可视为多维数组或几何对象。其核心特征在于: 坐…...
【1】Java 零基础入门学习(小白专用)
【1】Java 零基础入门学习 📚博客主页:代码探秘者 ✨专栏:《JavaSe从入门到精通》 其他更新ing… ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️ 🙏作者水…...
[c语言日寄]枚举类型
【作者主页】siy2333 【专栏介绍】⌈c语言日寄⌋:这是一个专注于C语言刷题的专栏,精选题目,搭配详细题解、拓展算法。从基础语法到复杂算法,题目涉及的知识点全面覆盖,助力你系统提升。无论你是初学者,还是…...
替代-UX设计师
初创公司如何在没有设计师的情况下 打造实用的用户体验 一个常见的捷径是使用预构建的组件库,如谷歌的 Material UI它们为你提供了构建块,但它们并没有为你考虑整个用户流程你仍然需要弄清楚所有这些是如何组合在一起的但是,很多时候&#x…...
【氧化镓】掺杂在β-Ga2O3材料中引入的深能级缺陷
1. 引言 1.1 β-Ga2O3材料的特性与应用前景 β-Ga2O3作为一种新型的宽禁带半导体材料,具有约4.6-4.8 eV的宽带隙、高击穿场强(约8 MV/cm)和优异的热稳定性,适用于高功率和射频电子器件。其独特的物理特性使其在高电压、高频率以及高功率应用场景中具有巨大的潜力。例如,…...
:ref 和 this.$refs 的区别及 $ 的作用
:ref 在 Vue 模板中,:ref 这种写法是使用了 Vue 的动态绑定语法(: 是 v-bind: 的缩写)。ref 是一个特殊的属性,用于给元素或组件注册引用信息。当你使用 :ref 时,通常是在动态地为元素或组件设置引用名称,…...
分库分表后,跨库查询和分布式事务解决方案
分库分表主要是为了解决单库单表的性能瓶颈,但拆分后数据分散在不同库和表中,这就导致了跨库查询和分布式事务的问题。 以下是实际项目中应对这些问题的核心策略与技术实现: 一、跨库查询解决方案 1. 全局表(广播表) 适用场景:基础数据表(如地区表、配置表)数据量小且…...
仅靠prompt,Agent难以自救
Alexander的观点很明确:未来 AI 智能体的发展方向还得是模型本身,而不是工作流(Work Flow)。还拿目前很火的 Manus 作为案例:他认为像 Manus 这样基于「预先编排好的提示词与工具路径」构成的工作流智能体,…...
android初学
Intent直译意图 显式意图:构造函数(实参为两个) (当前类对象 this,要跳转的.javaclass文件), 隐式意图:构造方法实参(填写一个)(需要在清单文件配置)系统自动匹配 点击事件: 注册设置点击监听器的常用三…...
IDEA修改默认作者名称
User: IDEA提示注释缺少author信息,但自动设置后,名称不是我想要的默认名称,应该如何修改IDEA里默认的作者名称? Kimi: 以下是几种修改IntelliJ IDEA中默认作者名称的方法: ### 方法一:修改File and Code …...
Playwright + MCP:用AI对话重新定义浏览器自动化,效率提升300%!
一、引言:自动化测试的“瓶颈”与MCP的革新 传统自动化测试依赖开发者手动编写脚本,不仅耗时且容易因页面动态变化失效。例如,一个简单的登录流程可能需要开发者手动定位元素、处理等待逻辑,甚至反复调试超时问题。而MCP…...
lodash 学习笔记/使用心得
lodash 学习笔记/使用心得 简单记一下 lodash 的一点学习笔记使用心得,最近也是打算清理一下所有的 dead code,然后发现我们用了好多的 lodash 方法。对比了之前的写法,重新看了一下官方文档,再自己重新动手写了点 util 之后发现…...
计算机操作系统(五) 前趋图和程序执行与进程的描述(附带图谱表格更好对比理解))
计算机操作系统(五) 前趋图和程序执行与进程的描述 前言一、前趋图和程序执行1.1前趋图1.2程序的顺序执行1.3程序的并发执行 二、进程的描述2.1进程的定义与特征2.2进程的基本状态与转换2.3挂起的操作系统和进程的转换2.4进程管理中的数据结构 总结&…...
“统计视角看世界”专栏阅读引导
根据文章主题和逻辑关系,我为您设计以下阅读引导方案: #mermaid-svg-xOnE2zTW20jz5myv {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-xOnE2zTW20jz5myv .error-icon{fill:#552222;}#mermaid…...
C/C++静态库的理解和制作
1.什么是库 库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。 本质上来说库是⼀种可执行代码的二进制形式,可以被操作系统…...
