模糊逻辑工具箱函数解析与应用
1. parsrule 函数
parsrule 函数用于解析模糊规则,但在未来版本中将被移除,建议使用 addRule 函数替代。
1.1 语法
-
outFIS = parsrule(inFIS,ruleList) -
outFIS = parsrule(inFIS,ruleList,Name,Value)
1.2 描述
-
outFIS = parsrule(inFIS,ruleList)返回一个模糊推理系统outFIS,它与输入的模糊系统inFIS等效,但模糊规则被ruleList中指定的规则所取代。 -
outFIS = parsrule(inFIS,ruleList,Name,Value)使用一个或多个名称 - 值对参数指定的选项来解析ruleList中的规则。
1.3 示例
以下是不同规则格式和语言下添加规则的示例:
% 加载模糊推理系统
fis = readfis('tipper');
% 使用默认 'verbose' 格式指定规则
rule1 = "If service is poor or food is rancid then tip is cheap";
rule2 = "If service is excellent and food is not rancid then tip is generous";
rules = [rule1 rule2];
fis2 = parsrule(fis,rules);
% 使用符号表达式指定规则
rule1 = "service==poor | food==rancid => tip=cheap";
rule2 = "service==excellent & food~=rancid => tip=generous";
rules = [rule1 rule2];
fis2 = parsrule(fis,rules,'Format','symbolic');
% 使用隶属函数索引指定规则
fis = readfis('mam22.fis');
rule1 = "1 2, 1 4 (1) : 1";
rule2 = "-1 1, 3 2 (1) : 1";
rules = [rule1 rule2];
fis2 = parsrule(fis,rules,'Format','indexed');
% 使用法语指定规则
fis = readfis('tipper');
rule1 = "Si service est poor ou food est rancid alors tip est cheap";
rule2 = "Si service est excellent et food n'est_pas rancid alors tip est generous";
rules = [rule1 rule2];
fis2 = parsrule(fis,rules,'Language','francais');
% 添加单条规则
a = readfis('tipper');
ruleTxt = 'If service is poor then tip is cheap';
a2 = parsrule(a,ruleTxt,'verbose');
1.4 输入参数
-
inFIS:模糊推理系统,指定为 FIS 结构,parsrule不会修改inFIS。 -
ruleList:模糊规则,可以是字符数组、字符串数组、字符向量或字符串。具体形式如下: - 字符数组,每行对应一条规则。
- 字符串数组,每个元素对应一条规则。
- 字符向量或字符串指定单条规则。
1.5 名称 - 值对参数
-
Format:规则格式,可选值为'verbose'(默认)、'symbolic'、'indexed'。 -
'verbose':使用语言表达式,规则权重可在规则文本末尾指定,默认值为 1。 -
'symbolic':使用与语言无关的符号表达式,规则权重同样可在末尾指定。 -
'indexed':使用输入和输出隶属函数(MF)索引,格式为<input MFs>, <output MFs>, (<weight>) : <logical operator - 1(AND), 2(OR)>。 -
Language:规则语言,可选值为'english'(默认)、'francais'、'deutsch'。
| 规则组件 | 英语 | 法语 | 德语 |
|---|---|---|---|
| 前件开始 | if | si | wenn |
| AND | and | et | und |
| OR | or | ou | oder |
| 后件开始(蕴含) | then | alors | dann |
| IS | is | est | ist |
| IS NOT | is not | n’est_pas | ist nicht |
1.6 输出参数
outFIS
:输出模糊推理系统,返回为 FIS 结构,与
inFIS
相同,只是规则列表仅包含
ruleList
中指定的规则。
1.7 兼容性考虑
parsrule
将在未来版本中移除,建议使用
addRule
替代。代码更新如下:
% 之前使用 parsrule 添加规则
rule1 = "1 2, 1 4 (1) : 1";
rule2 = "-1 1, 3 2 (1) : 1";
rules = [rule1 rule2];
fis = parsrule(fis,rules,'Format','indexed');
% 现在使用 addRule
rule1 = [1 2 1 4 1 1];
rule2 = [-1 1 3 2 1 1];
rules = [rule1; rule2];
fis = addRule(fis,rules);
2. pimf 函数
pimf
函数用于计算基于样条的 π 形隶属函数的模糊隶属度值。
2.1 语法
y = pimf(x,params)
2.2 描述
该函数返回使用基于样条的 π 形隶属函数计算的模糊隶属度值。隶属函数由 smf 函数和 zmf 函数的乘积给出:
[
f(x; a, b, c, d) =
\begin{cases}
0, & x \leq a \
2(\frac{x - a}{b - a})^2, & a \leq x \leq \frac{a + b}{2} \
1 - 2(\frac{x - b}{b - a})^2, & \frac{a + b}{2} \leq x \leq b \
1, & b \leq x \leq c \
1 - 2(\frac{x - c}{d - c})^2, & c \leq x \leq \frac{c + d}{2} \
2(\frac{x - d}{d - c})^2, & \frac{c + d}{2} \leq x \leq d \
0, & x \geq d
\end{cases}
]
参数
params
应指定为向量
[a b c d]
。
2.3 示例
% 指定输入值
x = 0:0.1:10;
% 计算隶属度值
y = pimf(x,[1 4 5 10]);
% 绘制隶属函数
plot(x,y)
title('pimf, P = [1 4 5 10]')
xlabel('x')
ylabel('Degree of Membership')
ylim([-0.05 1.05])
2.4 输入参数
-
x:输入值,指定为标量或向量。 -
params:隶属函数参数,指定为长度为 4 的向量[a b c d]。
2.5 输出参数
y
:隶属度值,返回为标量或向量,其维度与
x
匹配。
2.6 替代功能
可以使用
fismf
对象来创建和评估
pimf
隶属函数:
mf = fismf("pimf",P);
Y = evalmf(mf,X);
3. plotfis 函数
plotfis
函数用于显示模糊推理系统。
3.1 语法
-
plotfis(fis) -
plotfis(tree) -
plotfis(tree,Legend="on")
3.2 描述
-
plotfis(fis)显示类型 1 或类型 2 模糊推理系统(FIS)的高级图。 -
plotfis(tree)显示相互连接的 FIS 对象树的高级图。 -
plotfis(tree,Legend="on")通过添加图例显示指定fistree对象的输入、输出和连接信息。
3.3 示例
% 显示模糊推理系统
fis = readfis('tipper');
plotfis(fis);
% 显示模糊推理系统树
fis1 = mamfis('Name','fis1','NumInputs',2,'NumOutputs',1);
fis2 = sugfis('Name','fis2','NumInputs',2,'NumOutputs',2);
fis3 = sugfis('Name','fis3','NumInputs',3,'NumOutputs',1);
con1 = ["fis1/output1" "fis3/input1"];
con2 = ["fis2/output1" "fis3/input2"];
con3 = ["fis1/input2" "fis2/input1"];
tree = fistree([fis1 fis2 fis3],[con1; con2; con3]);
plotfis(tree,Legend="on");
3.4 输入参数
-
fis:模糊推理系统,可以是mamfis对象、sugfis对象、mamfistype2对象或sugfistype2对象。 -
tree:相互连接的模糊推理系统树,指定为fistree对象。
3.5 兼容性考虑
-
从 R2021b 开始,
plotfis函数显示 FIS 树的可视化表示,之前在 MATLAB 命令窗口中显示 FIS 树属性摘要。 -
从 R2019b 开始警告,未来版本将移除对将模糊推理系统表示为结构的支持,建议使用
mamfis和sugfis对象。
4. plotmf 函数
plotmf
函数用于绘制输入或输出变量的隶属函数。
4.1 语法
-
plotmf(fis,variableType,variableIndex) -
plotmf( ___ ,numPoints) -
[xOut,mfOut] = plotmf( ___ ) -
[xOut,umfOut,lmfOut] = plotmf( ___ )
4.2 描述
-
plotmf(fis,variableType,variableIndex)绘制模糊推理系统fis中输入或输出变量的隶属函数。 -
plotmf( ___ ,numPoints)指定每个隶属函数要绘制的数据点数。 -
[xOut,mfOut] = plotmf( ___ )返回论域(xOut)和隶属函数(mfOut)值,不进行绘制,适用于类型 1 模糊推理系统。 -
[xOut,umfOut,lmfOut] = plotmf( ___ )返回论域(xOut)、上隶属函数(umfOut)和下隶属函数(lmfOut)值,不进行绘制,适用于类型 2 模糊推理系统。
4.3 示例
% 绘制输入变量的隶属函数
fis = readfis('tipper');
plotmf(fis,'input',1);
% 指定绘制点数
plotmf(fis,'output',1,101);
% 获取隶属函数绘制数据
[xOut,yOut] = plotmf(fis,'input',2);
plot(xOut(:,2),yOut(:,2))
xlabel('food')
ylabel('delicious membership')
% 绘制类型 2 FIS 的隶属函数
fis = mamfistype2('NumInputs',3,'NumOutputs',1);
plotmf(fis,'input',1);
4.4 输入参数
-
fis:模糊推理系统,可以是mamfis对象、sugfis对象、mamfistype2对象或sugfistype2对象。 -
variableType:变量类型,可选值为'input'或'output'。 -
variableIndex:变量索引,指定为正整数。 -
numPoints:要绘制的数据点数,默认值为 181。
4.5 输出参数
-
xOut:论域数据,返回为numPoints行NMF列的数组。 -
mfOut:类型 1 隶属函数数据,返回为numPoints行NMF列的数组。 -
umfOut:类型 2 隶属函数的上隶属函数数据,返回为numPoints行NMF列的数组。 -
lmfOut:类型 2 隶属函数的下隶属函数数据,返回为numPoints行NMF列的数组。
4.6 兼容性考虑
从 R2019b 开始警告,未来版本将移除对将模糊推理系统表示为结构的支持,建议使用
mamfis
和
sugfis
对象。
4. probor 函数
probor
函数用于计算概率或(也称为代数和)。
4.1 语法
y = probor(x)
4.2 描述
该函数返回
x
中各列的概率或值。在模糊推理过程中,
probor
函数可作为模糊运算符或聚合运算符。
4.3 示例
% 定义论域
x = 0:0.1:10;
% 定义两个高斯隶属函数
y1 = gaussmf(x,[0.5 4]);
y2 = gaussmf(x,[2 7]);
% 计算概率或
y = probor([y1;y2]);
% 绘制结果
plot(x,[y1;y2;y])
legend('y1','y2','y')
ylim([-0.05 1.05])
ylabel('Membership')
xlabel('Input Value')
4.4 输入参数
x
:模糊输入值,指定为数组或行向量。
4.5 输出参数
y
:概率或值,返回为行向量,列数与
x
相同。
总结
本文详细介绍了模糊逻辑工具箱中的几个重要函数,包括
parsrule
、
pimf
、
plotfis
、
plotmf
和
probor
。这些函数在模糊推理系统的构建、评估和可视化方面发挥着重要作用。在使用这些函数时,需要注意它们的语法、输入输出参数以及兼容性问题。例如,
parsrule
函数将在未来版本中被移除,建议使用
addRule
替代;同时,从 R2019b 开始警告,未来将移除对将模糊推理系统表示为结构的支持,应使用
mamfis
和
sugfis
对象。通过合理使用这些函数,可以更高效地开发和分析模糊推理系统。
展望
随着模糊逻辑技术的不断发展,模糊逻辑工具箱可能会引入更多的功能和改进。未来可能会有更强大的隶属函数、更智能的规则解析方法以及更直观的可视化工具。同时,对于模糊推理系统在不同领域的应用,如机器学习、控制理论等,也需要进一步探索和研究,以充分发挥模糊逻辑的优势。
模糊逻辑工具箱函数解析与应用(续)
5. 函数操作流程总结
为了更清晰地展示这些函数的使用流程,下面给出相应的 mermaid 流程图。
5.1 parsrule 函数使用流程
graph LR
A[加载模糊推理系统 inFIS] --> B[定义规则列表 ruleList]
B --> C{选择是否使用名称 - 值对参数}
C -- 是 --> D[指定 Name,Value 参数]
C -- 否 --> E[调用 parsrule(inFIS,ruleList)]
D --> F[调用 parsrule(inFIS,ruleList,Name,Value)]
E --> G[得到输出模糊推理系统 outFIS]
F --> G
5.2 pimf 函数使用流程
graph LR
A[指定输入值 x] --> B[指定隶属函数参数 params]
B --> C[调用 pimf(x,params)]
C --> D[得到隶属度值 y]
D --> E{是否绘制隶属函数}
E -- 是 --> F[绘制隶属函数 plot(x,y)]
E -- 否 --> G[结束]
5.3 plotfis 函数使用流程
graph LR
A{选择输入类型} --> B1[选择模糊推理系统 fis]
A --> B2[选择模糊推理系统树 tree]
B1 --> C1[调用 plotfis(fis)]
B2 --> C2{是否显示图例}
C2 -- 是 --> D[调用 plotfis(tree,Legend="on")]
C2 -- 否 --> E[调用 plotfis(tree)]
5.4 plotmf 函数使用流程
graph LR
A[选择模糊推理系统 fis] --> B[选择变量类型 variableType]
B --> C[选择变量索引 variableIndex]
C --> D{是否指定绘制点数}
D -- 是 --> E[指定 numPoints]
D -- 否 --> F[使用默认 numPoints]
E --> G[调用 plotmf(fis,variableType,variableIndex,numPoints)]
F --> G
G --> H{是否获取数据不绘制}
H -- 是 --> I[根据系统类型获取相应数据]
H -- 否 --> J[绘制隶属函数]
5.5 probor 函数使用流程
graph LR
A[定义模糊输入值 x] --> B[调用 probor(x)]
B --> C[得到概率或值 y]
C --> D{是否绘制结果}
D -- 是 --> E[绘制结果 plot(x,y)]
D -- 否 --> F[结束]
6. 函数应用场景分析
这些函数在不同的场景下有着各自独特的应用价值。
6.1 parsrule 函数应用场景
-
规则更新
:当需要对现有的模糊推理系统的规则进行更新时,可以使用
parsrule函数。例如,在一个餐厅小费推荐系统中,随着餐厅服务和菜品质量评估标准的变化,需要更新小费推荐规则。 - 规则定制 :根据不同的业务需求,可以定制特定的规则。比如在工业控制领域,针对不同的生产环境和设备状态,定制不同的控制规则。
6.2 pimf 函数应用场景
-
模糊建模
:在模糊系统建模中,
pimf函数可以用于定义模糊集合的隶属函数。例如,在图像识别中,对图像的亮度、颜色等特征进行模糊建模。 -
数据处理
:在处理具有模糊性的数据时,使用
pimf函数可以将数据映射到模糊集合中。比如在气象预报中,对温度、湿度等气象数据进行模糊处理。
6.3 plotfis 函数应用场景
-
系统可视化
:在开发模糊推理系统时,使用
plotfis函数可以直观地展示系统的结构和规则。例如,在教学过程中,向学生展示模糊推理系统的工作原理。 -
系统调试
:在调试模糊推理系统时,通过
plotfis函数可以快速发现系统中可能存在的问题。比如检查输入输出变量和隶属函数的配置是否正确。
6.4 plotmf 函数应用场景
-
隶属函数分析
:在设计模糊推理系统时,使用
plotmf函数可以分析输入输出变量的隶属函数。例如,调整隶属函数的参数,观察其对系统性能的影响。 -
数据验证
:在获取实际数据后,使用
plotmf函数可以验证数据是否符合预设的隶属函数。比如在传感器数据处理中,验证传感器采集的数据是否在合理的模糊范围内。
6.5 probor 函数应用场景
-
模糊逻辑运算
:在模糊推理过程中,
probor函数可以作为模糊运算符或聚合运算符。例如,在多传感器融合中,对不同传感器的输出进行模糊逻辑运算。 -
决策分析
:在决策问题中,使用
probor函数可以对不同的决策方案进行模糊评估。比如在投资决策中,对不同投资项目的风险和收益进行模糊分析。
7. 函数使用注意事项
在使用这些函数时,还需要注意以下几点:
7.1 版本兼容性
-
如前面所述,
parsrule函数将在未来版本中被移除,建议尽早使用addRule函数替代。 -
从 R2019b 开始警告,未来将移除对将模糊推理系统表示为结构的支持,应使用
mamfis和sugfis对象。在编写代码时,要考虑到这些兼容性问题,避免在未来版本中出现错误。
7.2 参数设置
-
不同的函数有不同的输入参数,要确保参数的类型和取值范围正确。例如,
parsrule函数的ruleList参数可以是字符数组、字符串数组、字符向量或字符串,要根据实际情况选择合适的形式。 -
在使用名称 - 值对参数时,要注意参数的名称和取值。比如
parsrule函数的Format参数,可选值为'verbose'、'symbolic'、'indexed',要根据规则的表达方式选择合适的格式。
7.3 性能优化
-
在处理大规模数据时,要考虑函数的性能问题。例如,在使用
plotmf函数绘制大量隶属函数时,可以适当调整numPoints参数,减少不必要的计算。 - 对于复杂的模糊推理系统,要合理设计规则和隶属函数,避免规则过多或隶属函数过于复杂导致系统性能下降。
总结与建议
本文全面介绍了模糊逻辑工具箱中的
parsrule
、
pimf
、
plotfis
、
plotmf
和
probor
函数,包括它们的语法、使用示例、输入输出参数、应用场景和注意事项。这些函数为模糊推理系统的开发、分析和可视化提供了强大的工具。
为了更好地使用这些函数,建议开发者:
1. 及时关注函数的版本更新和兼容性问题,避免在未来版本中出现错误。
2. 在实际应用中,根据具体的业务需求选择合适的函数和参数设置,以提高系统的性能和效果。
3. 结合具体的应用场景,对函数进行灵活运用和扩展,开发出更高效、更智能的模糊推理系统。
随着模糊逻辑技术的不断发展,相信这些函数将在更多的领域得到广泛应用,为解决复杂的实际问题提供有力的支持。同时,开发者也应该不断学习和探索新的技术和方法,进一步提升模糊推理系统的性能和应用价值。
超级会员免费看
892

被折叠的 条评论
为什么被折叠?



