关于skfuzzy的trimf无负值及绘图偏移问题的技术咨询
模糊逻辑代码问题解答
疑问一:trimf()函数在x为负值时无对应值?
这是误解,trimf(X, [-50, 5, 30])生成的是三角隶属函数,参数定义了三个关键点:左端点-50、顶点5、右端点30。
- 当
X < -50时,隶属度为0; -50 ≤ X ≤5时,隶属度从0线性上升到1;5 < X ≤30时,隶属度从1线性下降到0;X>30时,隶属度回到0。
你看到的“无对应值”其实是隶属度为0的部分,并非函数没生成值。
疑问二:图像整体右移100,高斯函数C位置不符合预期?
核心问题是plt.plot()的x轴参数缺失:
你调用plt.plot(A)时,Matplotlib默认用数组的索引(0到199)作为x轴坐标,但你的X实际是[-100,100)的数值。这就导致原本对应X=-100的点被画到x=0位置,整体图像自然右移了100,均值为0的高斯函数C也被移到了x=100的位置。
修正后的代码
import numpy as np import skfuzzy as fuzz import matplotlib.pyplot as plt X = np.arange(-100, 100, 1) A = fuzz.trimf(X, [-50, 5, 30]) B = fuzz.trapmf(X, [-110, -100,-50,100]) C = fuzz.gaussmf(X, 0, 30) D = fuzz.gauss2mf(X, -10, 5, 10, 30) # 关键:指定x轴为X的实际值 plt.plot(X, A) plt.plot(X, B) plt.plot(X, C) plt.plot(X, D) plt.show()
修正后,x轴会显示[-100,100)的实际范围,高斯函数C的峰值会正确落在x=0处,所有隶属函数的位置都符合预期。
内容的提问来源于stack exchange,提问作者duckkkk
相关产品推荐
相关产品推荐

