以误差e=5、误差变化率ec=1.3为例,详细解释ut_temp = evalfis(a, [e_c, ec_c])的运算原理和流程。

模糊系统设计

https://www.iiisle.com/archives/ic5TGrBk

第一步:输入预处理

首先对原始输入进行限幅和缩放因子处理:

  • e = 5ec = 1.3

  • 缩放因子:f1 = 2.0(误差),f2 = 0.5(误差变化率)

  • 限幅后:e_c = max(min(5, 6), -6) = 5ec_c = max(min(1.3, 1.5), -1.5) = 1.3

第二步:模糊化(计算隶属度)

对于误差e=5:

  • PM(正中):论域[2, 4, 6],在5处的隶属度 = (6-5)/(6-4) = 0.5

  • PB(正大):论域[4, 6],在5处的隶属度 = (5-4)/(6-4) = 0.5

  • 其他模糊集隶属度为0

对于误差变化率ec=1.3:

  • PM(正中):论域[0.5, 1.0, 1.5],在1.3处的隶属度 = (1.5-1.3)/(1.5-1.0) = 0.4

  • PB(正大):论域[1.0, 1.5, 1.5],在1.3处的隶属度 = (1.3-1.0)/(1.5-1.0) = 0.6

  • 其他模糊集隶属度为0

计算公式解释

  • PM(正中)隶属度函数参数:论域[0.5, 1.0, 1.5]

    • 0.5:三角形左顶点

    • 1.0:三角形顶点(隶属度=1)

    • 1.5:三角形右顶点

  • 计算公式含义(1.5-1.3)/(1.5-1.0) = 0.4

    • 分子 (1.5-1.3):计算输入值1.3到顶点1.5的距离

    • 分母 (1.5-1.0):计算三角形左半边的底边宽度(从顶点1.5到左边界1.0的距离)

  • 几何意义: 这是在计算输入值1.3在PM隶属度函数左上升沿上的线性插值比例,表示输入值相对于三角形左半边的位置关系。

第三步:规则匹配

激活的规则及其可信度:

  1. 规则46e==PB & ec==ZO => u=NM

  2. 可信度 = min(0.5, 0.4) = 0.4

  3. 规则47e==PM & ec==PB => u=NB 可信度 = min(0.5, 0.6) = 0.5

  4. 规则48e==PB & ec==PM => u=NB

    可信度 = min(0.5, 0.4) = 0.4

  5. 规则49e==PB & ec==PB => u=NB

    可信度 = min(0.5, 0.6) = 0.5

第四步:解模糊化(重心法)

各规则输出截断:

  • NM(负中):论域[-10, -5, 0],隶属度 = 0.4

  • NB(负大):论域[-15, -10, -5],最大隶属度 = max(0.5, 0.4, 0.5) = 0.5

重心法计算:

计算所有被激活隶属度函数的加权平均重心:

 ut_temp = (NM区域的加权面积 + NB区域的加权面积) / 总激活面积

被激活的输出模糊集及参数:

  • NM(负中):三角形隶属度函数顶点[-10, -5, 0],隶属度=0.4

  • NB(负大):三角形隶属度函数顶点[-15, -10, -5],隶属度=0.5

离散化计算过程

在输出论域[-15, 15]上选取关键离散点进行计算:

1. 计算各离散点的隶属度值

对于NB模糊集(隶属度0.5):

  • 在u=-15处:μ(u) = 1.0 × 0.5 = 0.5

  • 在u=-12.5处:μ(u) = 0.75 × 0.5 = 0.375

  • 在u=-10处:μ(u) = 0.5 × 0.5 = 0.25

  • 在u=-7.5处:μ(u) = 0.25 × 0.5 = 0.125

  • 在u=-5处:μ(u) = 0 × 0.5 = 0

对于NM模糊集(隶属度0.4):

  • 在u=-10处:μ(u) = 0 × 0.4 = 0

  • 在u=-7.5处:μ(u) = 0.5 × 0.4 = 0.2

  • 在u=-5处:μ(u) = 1.0 × 0.4 = 0.4

  • 在u=-2.5处:μ(u) = 0.5 × 0.4 = 0.2

  • 在u=0处:μ(u) = 0 × 0.4 = 0

2. 构建组合隶属度函数(取最大值)

离散点u

NB隶属度

NM隶属度

组合μ(u) = max(NB,NM)

-15

0.500

0.000

0.500

-12.5

0.375

0.000

0.375

-10

0.250

0.000

0.250

-7.5

0.125

0.200

0.200

-5

0.000

0.400

0.400

-2.5

0.000

0.200

0.200

0

0.000

0.000

0.000

3. 重心法数值计算

使用离散化公式:

u^* = \frac{\sum [\mu(u_i) \times u_i]}{\sum \mu(u_i)}

分子计算: μ(u) × u 的加权和:

  • (-15) × 0.500 = -7.500

  • (-12.5) × 0.375 = -4.6875

  • (-10) × 0.250 = -2.500

  • (-7.5) × 0.200 = -1.500

  • (-5) × 0.400 = -2.000

  • (-2.5) × 0.200 = -0.500

  • 0 × 0.000 = 0.000

分子总和 = -7.500 - 4.6875 - 2.500 - 1.500 - 2.000 - 0.500 + 0 = -18.6875

分母计算: μ(u) 的总和: 0.500 + 0.375 + 0.250 + 0.200 + 0.400 + 0.200 + 0.000 = 1.925

4. 最终结果
u^* = \frac{-18.6875}{1.925} = -9.71

实际MATLAB计算得到:ut_temp =-9.71

运算流程总结

  1. 输入:e=5, ec=1.3 → 预处理后 e_c=5, ec_c=1.3

  2. 模糊化:确定各输入变量在各模糊集的隶属度

  3. 规则推理:找到所有被激活的规则,计算可信度

  4. 解模糊:使用重心法将模糊输出转换为精确值

  5. 输出:控制量 u = -9.71

这个结果表示系统认为当前需要施加-12.5的较大负向控制量来快速减小正向误差,使系统输出向参考信号靠拢。由于误差和误差变化率都较大且为正,系统采取了较强的负向控制策略。