模糊控制器隶属度函数绘制

模糊控制器隶属度函数绘制

这里主要介绍两种方法,都是用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还挡住了曲线

在这里插入图片描述

plotmf()函数

在这里插入图片描述

这里需要我们先用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是相同的

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Solititude/article/details/129633134