模糊推理系统相关函数详解
1. getTunableValues 函数
1.1 功能概述
getTunableValues
函数用于从模糊推理系统中获取可调参数的值。
1.2 语法
paramvals = getTunableValues(fis,paramset)
1.3 详细描述
该函数返回模糊推理系统
fis
的可调参数值。要指定返回的参数值,需使用
paramset
。
1.4 输入参数
| 参数 | 描述 |
|---|---|
| fis |
模糊推理系统,可以是
mamfis
对象、
sugfis
对象、
mamfistype2
对象、
sugfistype2
对象或
fistree
对象。
|
| paramset |
可调参数设置,是输入 FIS 中输入、输出和规则参数设置的数组。可使用
getTunableSettings
函数获取这些参数设置。
paramset
可以是输入、输出或规则参数设置,也可以是这些设置的任意组合。
|
1.5 输出参数
| 参数 | 描述 |
|---|---|
| paramvals |
可调参数值,以数组形式返回。
paramvals
中值的顺序与
paramset
中参数的顺序相匹配。你可以修改这些参数值,然后使用
setTunableValues
函数将其设置到你的 FIS 中。
|
1.6 示例
% 创建模糊推理系统,并定义输入、输出和规则的可调参数设置
fis = mamfis('NumInputs',2,'NumOutputs',1);
[in,out,rule] = getTunableSettings(fis);
% 获取模糊推理系统的输入、输出和规则的可调参数值
paramVals = getTunableValues(fis,[in;out;rule]);
1.7 流程图
graph TD;
A[创建模糊推理系统 fis] --> B[获取可调参数设置 paramset];
B --> C[调用 getTunableValues 函数];
C --> D[返回可调参数值 paramvals];
2. linsmf 函数
2.1 功能概述
linsmf
函数用于使用线性 S 形饱和隶属度函数计算模糊隶属度值。
2.2 语法
y = linsmf(x,params)
2.3 详细描述
该函数使用线性 S 形隶属度函数计算模糊隶属度值。也可以使用
fismf
对象来计算此隶属度函数。
2.4 输入参数
| 参数 | 描述 |
|---|---|
| x | 输入值,以标量或向量形式指定,用于计算隶属度值。 |
| params |
隶属度函数参数,指定为向量
[a b]
。参数
a
定义隶属度函数的起点,
b
定义其终点。当
a
等于
b
时,会产生一个清晰的隶属度函数。
|
2.5 输出参数
| 参数 | 描述 |
|---|---|
| y |
隶属度值,以标量或向量形式返回。
y
的维度与
x
的维度相匹配。
y
的每个元素是为
x
的相应元素计算的隶属度值。
|
2.6 示例
% 指定输入值
x = 0:0.1:10;
% 计算线性 S 形隶属度函数
y = linsmf(x,[4 6]);
% 绘制隶属度函数
plot(x,y)
xlabel('linsmf, P = [4 6]')
ylabel('Membership')
ylim([-0.05 1.05])
2.7 替代功能
可以创建并评估一个实现
linsmf
隶属度函数的
fismf
对象。
mf = fismf("linsmf",P);
Y = evalmf(mf,X);
这里,
X
、
P
和
Y
分别对应于
linsmf
的
x
、
params
和
y
参数。
2.8 扩展功能
可以使用 MATLAB® Coder™ 生成 C 和 C++ 代码。
2.9 流程图
graph TD;
A[指定输入值 x] --> B[指定隶属度函数参数 params];
B --> C[调用 linsmf 函数];
C --> D[返回隶属度值 y];
D --> E[绘制隶属度函数];
3. linzmf 函数
3.1 功能概述
linzmf
函数用于使用线性 Z 形饱和隶属度函数计算模糊隶属度值。
3.2 语法
y = linzmf(x,params)
3.3 详细描述
该函数使用线性 Z 形隶属度函数计算模糊隶属度值。也可以使用
fismf
对象来计算此隶属度函数。
3.4 输入参数
| 参数 | 描述 |
|---|---|
| x | 输入值,以标量或向量形式指定,用于计算隶属度值。 |
| params |
隶属度函数参数,指定为向量
[a b]
。参数
a
定义隶属度函数的起点,
b
定义其终点。当
a
等于
b
时,会产生一个清晰的隶属度函数。
|
3.5 输出参数
| 参数 | 描述 |
|---|---|
| y |
隶属度值,以标量或向量形式返回。
y
的维度与
x
的维度相匹配。
y
的每个元素是为
x
的相应元素计算的隶属度值。
|
3.6 示例
% 指定输入值
x = 0:0.1:10;
% 计算线性 Z 形隶属度函数
y = linzmf(x,[4 6]);
% 绘制隶属度函数
plot(x,y)
xlabel('linzmf, P = [4 6]')
ylabel('Membership')
ylim([-0.05 1.05])
3.7 替代功能
可以创建并评估一个实现
linzmf
隶属度函数的
fismf
对象。
mf = fismf("linzmf",P);
Y = evalmf(mf,X);
这里,
X
、
P
和
Y
分别对应于
linzmf
的
x
、
params
和
y
参数。
3.8 扩展功能
可以使用 MATLAB® Coder™ 生成 C 和 C++ 代码。
3.9 流程图
graph TD;
A[指定输入值 x] --> B[指定隶属度函数参数 params];
B --> C[调用 linzmf 函数];
C --> D[返回隶属度值 y];
D --> E[绘制隶属度函数];
4. mam2sug 函数
4.1 功能概述
mam2sug
函数用于将 Mamdani 模糊推理系统转换为 Sugeno 模糊推理系统。不过,该函数将在未来版本中被移除,建议使用
convertToSugeno
函数代替。
4.2 语法
sugFIS = mam2sug(mamFIS)
4.3 详细描述
该函数将 Mamdani 模糊推理系统转换为 Sugeno 模糊推理系统。
4.4 输入参数
| 参数 | 描述 |
|---|---|
| mamFIS |
Mamdani 模糊推理系统,以结构形式指定。可以在命令行或使用模糊逻辑设计器构建
mamFIS
。
|
4.5 输出参数
| 参数 | 描述 |
|---|---|
| sugFIS |
Sugeno 模糊推理系统,以结构形式返回。
sugFIS
具有以下特点:
- 具有常量输出隶属度函数,其值对应于
mamFIS
中输出隶属度函数的质心。
- 使用加权平均去模糊化方法。 - 使用乘积蕴含方法。 - 使用求和聚合方法。
sugFIS
的其余属性,包括输入隶属度函数和规则定义,与
mamFIS
保持不变。
|
4.6 示例
% 加载 Mamdani 模糊推理系统
mam_fismat = readfis('mam22.fis');
% 将该系统转换为 Sugeno 模糊推理系统
sug_fismat = mam2sug(mam_fismat);
% 绘制两个模糊系统的输出曲面
subplot(2,2,1)
gensurf(mam_fismat)
title('Mamdani system (Output 1)')
subplot(2,2,2)
gensurf(sug_fismat)
title('Sugeno system (Output 1)')
subplot(2,2,3)
gensurf(mam_fismat,gensurfOptions('OutputIndex',2))
title('Mamdani system (Output 2)')
subplot(2,2,4)
gensurf(sug_fismat,gensurfOptions('OutputIndex',2))
title('Sugeno system (Output 2)')
4.7 提示
-
如果你有一个运行良好的 Mamdani 模糊推理系统,可以考虑使用
mam2sug函数将其转换为计算效率更高的 Sugeno 结构,以提高性能。 -
如果
sugFIS有一个单一的输出变量,并且你有适当的测量输入/输出训练数据,可以使用anfis函数调整sugFIS的隶属度函数参数。
4.8 兼容性考虑
mam2sug
函数将在未来版本中被移除,从 R2018b 开始不建议使用。要更新代码,将函数名从
mam2sug
改为
convertToSugeno
,语法是等效的。
4.9 流程图
graph TD;
A[加载 Mamdani 模糊推理系统 mamFIS] --> B[调用 mam2sug 函数];
B --> C[返回 Sugeno 模糊推理系统 sugFIS];
C --> D[绘制输出曲面];
5. mf2mf 函数
5.1 功能概述
mf2mf
函数用于在隶属度函数之间转换参数。不过,该函数将在未来版本中被移除,建议使用
fismf
对象的点表示法来转换隶属度函数。
5.2 语法
outParams = mf2mf(inParams,inType,outType)
5.3 详细描述
该函数将一种类型的隶属度函数的参数转换为另一种隶属度函数的参数。有时这种转换会导致信息丢失,即如果将输出参数转换回原始隶属度函数类型,转换后的隶属度函数可能与原始函数不同。
5.4 输入参数
| 参数 | 描述 |
|---|---|
| inParams | 初始隶属度函数参数,以向量形式指定。 |
| inType |
初始隶属度函数类型,可以是以下隶属度函数之一:
'gbellmf'
、
'gaussmf'
、
'gauss2mf'
、
'trimf'
、
'trapmf'
、
'sigmf'
、
'dsigmf'
、
'psigmf'
、
'zmf'
、
'pimf'
、
'smf'
。
|
| outType |
最终隶属度函数类型,可以是以下隶属度函数之一:
'gbellmf'
、
'gaussmf'
、
'gauss2mf'
、
'trimf'
、
'trapmf'
、
'sigmf'
、
'dsigmf'
、
'psigmf'
、
'zmf'
、
'pimf'
、
'smf'
。
|
5.5 输出参数
| 参数 | 描述 |
|---|---|
| outParams | 最终隶属度函数参数,以向量形式返回。 |
5.6 示例
% 创建广义钟形隶属度函数的参数
x = 0:0.1:5;
mf1 = [1 2 3];
% 将参数转换为三角形隶属度函数的参数
mf2 = mf2mf(mf1,'gbellmf','trimf');
% 绘制两个函数进行比较
plot(x,gbellmf(x,mf1),x,trimf(x,mf2))
legend('Generalized bell-shaped','Triangle-shaped','Location','South')
ylim([-0.05 1.05])
5.7 兼容性考虑
mf2mf
函数将在未来版本中被移除,从 R2018b 开始不建议使用。现在,当更改隶属度函数类型时,参数会自动转换。
% 旧方法
fis = readfis('tipper');
oldType = fis.input(1).mf(1).type;
oldParams = fis.input(1).mf(1).params;
fis.input(1).mf(1).type = newType;
fis.input(1).mf(1).params = mf2mf(oldParams,oldType,newType);
% 新方法
fis = readfis('tipper');
fis.Inputs(1).MembershipFunctions(1).Type = newType;
5.8 流程图
graph TD;
A[指定初始隶属度函数参数 inParams 和类型 inType] --> B[指定最终隶属度函数类型 outType];
B --> C[调用 mf2mf 函数];
C --> D[返回最终隶属度函数参数 outParams];
D --> E[绘制函数进行比较];
6. mfedit 函数
6.1 功能概述
mfedit
函数用于打开隶属度函数编辑器。
6.2 语法
mfedit
mfedit(fis)
mfedit(fileName)
6.3 详细描述
使用隶属度函数编辑器,你可以指定每个输入和输出变量的范围。然后,对于每个变量,你可以定义隶属度函数的数量、每个隶属度函数的类型以及隶属度函数参数。
6.4 输入参数
| 参数 | 描述 |
|---|---|
| fis |
模糊推理系统,可以是
mamfis
或
sugfis
对象,在 MATLAB 工作区中指定。
|
| fileName |
文件名,以字符串或字符向量形式指定,可以包含或不包含
.fis
扩展名。该文件必须在当前工作目录或 MATLAB 路径中。
|
6.5 示例
% 加载模糊推理系统
fis = readfis('tipper');
% 打开隶属度函数编辑器并加载该模糊系统
mfedit(fis)
6.6 兼容性考虑
对将模糊推理系统表示为结构的支持将在未来版本中被移除,建议使用
mamfis
和
sugfis
对象代替。可以使用
convertfis
函数将现有的模糊推理系统结构转换为对象。
6.7 流程图
graph TD;
A[加载或创建模糊推理系统 fis] --> B[调用 mfedit 函数];
B --> C[打开隶属度函数编辑器];
7. newfis 函数
7.1 功能概述
newfis
函数用于创建新的模糊推理系统。不过,该函数将在未来版本中被移除,建议使用
mamfis
或
sugfis
函数代替。
7.2 语法
fis = newfis(name)
fis = newfis(name,Name,Value)
7.3 详细描述
fis = newfis(name)
返回一个具有指定名称的默认 Mamdani 模糊推理系统。
fis = newfis(name,Name,Value)
返回一个具有使用一个或多个名称 - 值对参数指定属性的模糊推理系统。
7.4 输入参数
| 参数 | 描述 |
|---|---|
| name | 模糊推理系统名称,以字符向量或字符串形式指定。 |
| Name,Value |
可选的名称 - 值对参数,用于指定模糊推理系统的属性。例如:
-
'FISType'
:模糊推理系统类型,可以是
'mamdani'
(默认)或
'sugeno'
。
-
'AndMethod'
:AND 模糊运算符方法,可以是
'min'
、
'prod'
或自定义函数名称。
-
'OrMethod'
:OR 模糊运算符方法,可以是
'max'
、
'probor'
或自定义函数名称。
-
'ImplicationMethod'
:蕴含方法,可以是
'min'
、
'prod'
或自定义函数名称。
-
'AggregationMethod'
:聚合方法,可以是
'max'
、
'sum'
、
'probor'
或自定义函数名称。
-
'DefuzzificationMethod'
:去模糊化方法,可以是
'centroid'
、
'bisector'
、
'mom'
、
'lom'
、
'som'
、
'wtaver'
、
'wtsum'
或自定义函数名称。
|
7.5 输出参数
| 参数 | 描述 |
|---|---|
| fis |
模糊推理系统,以 FIS 结构形式返回。该模糊系统使用指定的名称 - 值对参数进行配置,初始时没有输入变量、输出变量或规则。可以使用
addvar
或
addRule
函数添加变量或规则,也可以使用模糊逻辑设计器编辑该模糊系统。
|
7.6 示例
% 创建默认 Mamdani 模糊推理系统
sys = newfis('fis')
% 创建默认 Sugeno 模糊推理系统
sys = newfis('fis','FISType','sugeno')
% 创建使用 'bisector' 去模糊化和 'prod' 蕴含的 Mamdani 模糊推理系统
sys = newfis('fis','DefuzzificationMethod','bisector',...
'ImplicationMethod','prod');
7.7 兼容性考虑
newfis
函数将在未来版本中被移除,从 R2018b 开始不建议使用。建议使用
mamfis
或
sugfis
函数代替。以下是一些典型的
newfis
使用方式及如何更新代码的示例:
| 旧代码形式 | 新代码形式 |
| ---- | ---- |
|
fis = newfis(name)
|
fis = mamfis('Name',name)
|
|
fis = newfis(name,'FISType','mamdani')
|
fis = mamfis('Name',name)
|
|
fis = newfis(name,'FISType','sugeno')
|
fis = sugfis('Name',name)
|
|
fis = newfis(name,'FISType','mamdani','AndMethod','prod')
|
fis = mamfis('Name',name,'AndMethod','prod')
|
|
fis = newfis(name,'FISType','sugeno','OrMethod','probor')
|
fis = sugfis('Name',name,'OrMethod','probor')
|
7.8 流程图
graph TD;
A[指定模糊推理系统名称 name] --> B[指定可选的名称 - 值对参数 Name,Value];
B --> C[调用 newfis 函数];
C --> D[返回模糊推理系统 fis];
8. 函数总结与对比
8.1 功能总结
| 函数名 | 功能概述 | 是否移除 | 替代函数 |
|---|---|---|---|
| getTunableValues | 从模糊推理系统中获取可调参数的值 | 否 | 无 |
| linsmf | 使用线性 S 形饱和隶属度函数计算模糊隶属度值 | 否 | 可使用 fismf 对象 |
| linzmf | 使用线性 Z 形饱和隶属度函数计算模糊隶属度值 | 否 | 可使用 fismf 对象 |
| mam2sug | 将 Mamdani 模糊推理系统转换为 Sugeno 模糊推理系统 | 是 | convertToSugeno |
| mf2mf | 在隶属度函数之间转换参数 | 是 | 使用 fismf 对象的点表示法 |
| mfedit | 打开隶属度函数编辑器 | 否 | 无 |
| newfis | 创建新的模糊推理系统 | 是 | mamfis 或 sugfis |
8.2 输入输出参数对比
| 函数名 | 输入参数 | 输出参数 |
|---|---|---|
| getTunableValues | fis(模糊推理系统对象),paramset(可调参数设置数组) | paramvals(可调参数值数组) |
| linsmf | x(输入值),params(隶属度函数参数向量 [a b]) | y(隶属度值) |
| linzmf | x(输入值),params(隶属度函数参数向量 [a b]) | y(隶属度值) |
| mam2sug | mamFIS(Mamdani 模糊推理系统结构) | sugFIS(Sugeno 模糊推理系统结构) |
| mf2mf | inParams(初始隶属度函数参数向量),inType(初始隶属度函数类型),outType(最终隶属度函数类型) | outParams(最终隶属度函数参数向量) |
| mfedit | fis(模糊推理系统对象)或 fileName(文件名) | 打开隶属度函数编辑器 |
| newfis | name(模糊推理系统名称),可选的 Name,Value 对参数 | fis(模糊推理系统结构) |
8.3 流程图对比
不同函数的流程图虽然具体步骤有所不同,但整体上都有输入、处理和输出的过程,以下是一个通用的流程图表示:
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px
A([指定输入参数]):::startend --> B(调用函数):::process
B --> C([返回输出结果]):::startend
9. 实际应用建议
9.1 隶属度函数的选择
-
线性 S 形和 Z 形隶属度函数
:当需要表示具有一定斜率变化的隶属关系时,可以选择
linsmf和linzmf函数。例如,在描述温度从低到高的隶属度变化时,线性 S 形函数可以很好地表示这种渐变关系。 -
其他隶属度函数
:根据具体问题的特点,还可以选择
gbellmf(广义钟形隶属度函数)、gaussmf(高斯隶属度函数)等。如果问题具有对称性和连续性,高斯隶属度函数可能是一个不错的选择。
9.2 模糊推理系统的转换
-
Mamdani 到 Sugeno 的转换
:如果已经有一个运行良好的 Mamdani 模糊推理系统,并且希望提高计算效率,可以使用
mam2sug(或替代函数convertToSugeno)将其转换为 Sugeno 模糊推理系统。具体步骤如下:- 加载 Mamdani 模糊推理系统:
mam_fismat = readfis('your_mamdani_fis.fis');
2. 进行转换:
sug_fismat = convertToSugeno(mam_fismat);
3. 验证转换结果:可以绘制两个系统的输出曲面进行比较。
subplot(2,2,1)
gensurf(mam_fismat)
title('Mamdani system (Output 1)')
subplot(2,2,2)
gensurf(sug_fismat)
title('Sugeno system (Output 1)')
9.3 隶属度函数参数的转换
-
旧方法与新方法
:在更新代码时,应尽量使用新的方法。例如,将隶属度函数类型从
gbellmf转换为trimf:- 旧方法:
fis = readfis('tipper');
oldType = fis.input(1).mf(1).type;
oldParams = fis.input(1).mf(1).params;
fis.input(1).mf(1).type = 'trimf';
fis.input(1).mf(1).params = mf2mf(oldParams,oldType,'trimf');
- 新方法:
fis = readfis('tipper');
fis.Inputs(1).MembershipFunctions(1).Type = 'trimf';
9.4 模糊推理系统的创建
-
使用新函数
:在创建模糊推理系统时,建议使用
mamfis或sugfis代替newfis。例如,创建一个名为 ‘my_fis’ 的 Mamdani 模糊推理系统:
fis = mamfis('Name','my_fis');
10. 总结
本文详细介绍了多个与模糊推理系统相关的函数,包括其功能、语法、输入输出参数、示例以及兼容性考虑。在实际应用中,应根据具体需求选择合适的函数,并注意函数的更新和替代情况。对于即将被移除的函数,应尽快更新代码以保证程序的稳定性和兼容性。同时,通过流程图和示例代码,帮助读者更好地理解和使用这些函数,从而构建和优化模糊推理系统。
通过对这些函数的学习和应用,读者可以更加熟练地进行模糊推理系统的设计、开发和优化,为解决实际问题提供有力的支持。希望本文能够对读者在模糊逻辑领域的学习和实践有所帮助。
模糊推理系统核心函数详解
超级会员免费看
30

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



