常见隶属度函数的图形与代码

本文详细介绍了模糊控制中隶属度函数的作用,包括高斯型、广义钟形、S型、梯形、三角形和Z形六种形式,展示了如何通过调整参数灵活描述输入输出变化,以及它们在智能控制中的潜在应用。并提供了MATLAB代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模糊控制是一种基于模糊逻辑和隶属度理论的控制方法。它可以很好地描述控制对象的语言变量,如“速度快”、“温度高”等,从而实现了语言控制。

在模糊控制中,隶属度函数(Membership Function)起到将语言量化的重要作用。它使用概念如“高”、“低”来描述系统,更接近人的思考方式。通过调整隶属度函数的参数,如形状、位置等,可以灵活描述输入和输出变化,有利于建立人机智能系统。因此,隶属度函数是模糊控制的核心组成部分之一。它使控制系统能够处理不确定信息,在智能控制中有广泛应用前景。

常用的六种隶属度函数分别对应图中六张图形

如上图,探究六种隶属度函数中各个参数的值的意义。

(1)高斯型隶属度函数:

由于取对应不同c值,图示中两条线呈现不同的结果可知,同样c值时,sigma越大,对应相同x值,隶属度越高;在c值不同时,两条曲线的水平位置发生平移。

(2)广义钟形隶属度函数:

取对应不同的c值,两条曲线发生水平方向上的平移;a和b取值的改变可以改变隶属度函数大于零点五部分的 “水平宽度”。

(3)S型隶属度函数:

a的取值正负决定了隶属度函数的开口方向,而a的绝对值大小决定了隶属度函数的陡峭程度,c决定了隶属度函数在水平方向上的平移初值。

(4)梯形隶属度函数:

a和d确定梯形的左右和x轴相交两点的位置,b和c确定梯形两腰的斜率,通过改变这些参数可以改变梯形隶属度函数的图像。

(5)三角形隶属度函数:

a和c可以确定三角形两边与x轴相交的位置,而参数b可以确定三角形“峰”的水平位置,此时两腰的斜率也会随之改变。

(6)Z形隶属度函数:

A可以确定函数下降的初始点,b可以确定函数交汇到水平线的交汇点。

附录 MATLAB代码

x=-10:0.01:10;

figure;



sigma1=3;sigma2=4;c11=2;c12=1;

y11=gaussmf(x,[sigma1,c11]);

y12=gaussmf(x,[sigma2,c11]);

y13=gaussmf(x,[sigma2,c12]);

subplot(2,3,1);

plot(x,y11,'-',x,y12,'--',x,y13,'--');

grid;

legend('sigma=3,c=2','sigma=4,c=2','sigma=4,c=1');

axis([-10 10 0 1.1]);



a21=5;a22=2;b21=2;b22=4;c21=0;c22=1;

y21=gbellmf(x,[a21,b21,c21]);

y22=gbellmf(x,[a21,b21,c22]);

y23=gbellmf(x,[a22,b21,c22]);

y24=gbellmf(x,[a21,b22,c21]);

subplot(2,3,2);

plot(x,y21,'-',x,y22,'-',x,y23,'-',x,y24,'-');

grid;

legend('a=5,b=2,c=0','a=5,b=2,c=1','a=3,b=2,c=0','a=5,b=4,c=0');

axis([-10 10 0 1.1]);



a31=2;a32=-2;a33=-1;c3=0;

y31=sigmf(x,[a31,c3]);

y32=sigmf(x,[a32,c3]);

y33=sigmf(x,[a33,c3]);

subplot(2,3,3);

plot(x,y31,'-',x,y32,'--',x,y33,'--');

grid;

legend('a1=2','a2=-2','a3=-1');

axis([-10 10 0 1.1]);



a4=-8;a41=-6;b4=-4;b41=-6;c4=4;c41=6;d4=8;d41=6;

y4=trapmf(x,[a4,b4,c4,d4]);

y41=trapmf(x,[a41,b4,c4,d4]);

y42=trapmf(x,[a4,b41,c4,d4]);

y43=trapmf(x,[a4,b4,c41,d4]);

y44=trapmf(x,[a4,b4,c4,d41]);

subplot(2,3,4);

plot(x,y4,'-',x,y41,'-',x,y42,'-',x,y43,'-',x,y44,'-');

grid;

legend('a=-8,b=-4,c=4,d=8','a=-6,b=-4,c=4,d=8','a=-8,b=-6,c=4,d=8','a=-8,b=-4,c=6,d=8','a=-8,b=-4,c=4,d=6');

axis([-10 10 0 1.1]);



a5=-4;a51=-2;b5=2;b51=4;c5=7;c51=5;

y5=trimf(x,[a5,b5,c5]);

y51=trimf(x,[a51,b5,c5]);

y52=trimf(x,[a5,b51,c5]);

y53=trimf(x,[a5,b5,c51]);

subplot(2,3,5);

plot(x,y5,'-',x,y51,'-',x,y52,'-',x,y53,'-');

grid;

legend('a=-4,b=2,c=7','a=-2,b=2,c=7','a=-4,b=4,c=7','a=-4,b=2,c=5');

axis([-10 10 0 1.1]);



a6=-4;a61=-2;b6=7;b61=5;

y6=zmf(x,[a6,b6]);

y61=zmf(x,[a61,b6]);

y62=zmf(x,[a6,b61]);

subplot(2,3,6);

plot(x,y6,'-',x,y61,'-',x,y62,'-');

grid;

legend('a=-4,b=7','a=-2,b=7','a=-4,b=5');

axis([-10 10 0 1.1]);

Reference

[1] Liu, J. K. (2021). Intelligent Control (5th ed.). Beijing: Electronic Industry Press.

[2] Zadeh, L. A. (1965). Fuzzy sets. Information and control, 8(3), 338-353.

### 什么是三角隶属度函数 三角隶属度函数是一种常见的模糊集合表示方法,用于描述输入变量属于某个模糊集的程度。它由三个参数定义:\(a\)、\(b\) 和 \(c\),其中 \(a \leq b \leq c\)。该函数的形状是一个三角形,在点 \(b\) 处达到最大值 1,而在 \(a\) 和 \(c\) 的位置上取值为 0。 其数学表达形式如下: \[ f(x; a, b, c) = \begin{cases} 0 & \text{if } x < a \\ \frac{x-a}{b-a} & \text{if } a \leq x < b \\ \frac{c-x}{c-b} & \text{if } b \leq x \leq c \\ 0 & \text{if } x > c \end{cases} \] 这种函数广泛应用于模糊逻辑控制系统中[^1]。 ### 实现方法示例代码 以下是基于 Python 编写的三角隶属度函数实现及其可视化展示的代码示例: ```python import numpy as np import matplotlib.pyplot as plt def triangle_membership_function(x, a, b, c): """ 计算给定 x 值对应的三角隶属度函数值。 参数: x (float or array-like): 输入值或数组。 a (float): 左端点坐标。 b (float): 中间顶点坐标。 c (float): 右端点坐标。 返回: float or array-like: 隶属度值。 """ result = np.zeros_like(x) condition_1 = (x >= a) & (x < b) condition_2 = (x >= b) & (x <= c) result[condition_1] = (x[condition_1] - a) / (b - a) result[condition_2] = (c - x[condition_2]) / (c - b) return result # 测试数据 x_values = np.linspace(0, 10, 500) y_values = triangle_membership_function(x_values, 2, 5, 8) plt.figure(figsize=(8, 4)) plt.plot(x_values, y_values, label="Triangle Membership Function", color='blue') plt.title("Triangular Membership Function Visualization") plt.xlabel("Input Value (x)") plt.ylabel("Membership Degree") plt.grid(True) plt.legend() plt.show() ``` 上述代码实现了三角隶属度函数并绘制了它的图形化表现。通过调整 `triangle_membership_function` 函数中的参数 \(a\)、\(b\) 和 \(c\),可以改变三角形的位置和宽度[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Metaphysicist.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值