这里主要介绍两种方法,都是用MATLAB进行绘制,用Python绘图会报encoding编码的问题
隶属度函数有三角形隶属度函数、高斯隶属度函数、梯形隶属度函数等等
这里以三角形隶属度函数为例
% 模糊集合的名称
names = {'NB', 'NM', 'NS', 'ZO', 'PS', 'PM', 'PB'};
% 论域
x = linspace(-3, 3, 100);
% 隶属度函数参数
params = containers.Map( ...
{'NB', 'NM', 'NS', 'ZO', 'PS', 'PM', 'PB'}, ...
{[-4, -3, -2], [-3, -2, -1], [-2, -1, 0], [-1, 0, 1], [0, 1, 2], [1, 2, 3], [2, 3, 4]} ...
);
% 颜色
colors = ['r', 'g', 'b', 'c', 'm', 'y', 'k'];
% 绘制三角形隶属度函数
figure;
hold on;
for i = 1:length(names)
param = params(names{i});
y = zeros(size(x));
y(x >= param(1) & x <= param(2)) = (x(x >= param(1) & x <= param(2)) - param(1)) / (param(2) - param(1));
y(x >= param(2) & x <= param(3)) = (param(3) - x(x >= param(2) & x <= param(3))) / (param(3) - param(2));
plot(x, y, colors(i), 'LineWidth', 2, 'DisplayName', names{i});
end
hold off;
legend('Location', 'NorthEast');
xlabel('论域');
ylabel('隶属度');
title('三角形隶属度函数图');
grid on;
print('triangular_membership_functions.png', '-dpng', '-r300');
出图效果大概是下面这样,效果一般,legend
还挡住了曲线
这里需要我们先用MATLAB的fuzzy工具箱设计好模糊控制器,目录下有.fis
文件
plotmf(fis,variableType,variableIndex)
fis
— Fuzzy inference system,即.fis
文件variableType
— Variable type'input'
| 'output'
,即绘制输入还是输出变量的隶属度函数variableIndex
— 即输入/输出变量的序号,注意是正值fis = readfis('fuzzyPID');
plotmf(fis,'output',1)
效果如下,还是比较规范的,横坐标的name和绘制变量的name是相同的