基于matlab的模糊控制器仿真,通过matlab编程实现模糊规则,控制过程等

简介: 基于matlab的模糊控制器仿真,通过matlab编程实现模糊规则,控制过程等

1.算法描述

   Zadeh创立的模糊数学,对不明确系统的控制有极大的贡献,自七十年代以后,一些实用的模糊控制器的相继出现,使得我们在控制领域中又向前迈进了一大步。模糊逻辑控制(Fuzzy Logic Control)简称模糊控制(Fuzzy Control),是以模糊集合论、模糊语言变量和模糊逻辑推理为基础的一种计算机数字控制技术。1965年,美国的L.A.Zadeh创立了模糊集合论;1973年他给出了模糊逻辑控制的定义和相关的定理。1974年,英国的E.H.Mamdani首次根据模糊控制语句组成模糊控制器,并将它应用于锅炉和蒸汽机的控制,获得了实验室的成功。这一开拓性的工作标志着模糊控制论的诞生。模糊控制实质上是一种非线性控制,从属于智能控制的范畴。模糊控制的一大特点是既有系统化的理论,又有大量的实际应用背景。模糊控制的发展最初在西方遇到了较大的阻力;然而在东方尤其是日本,得到了迅速而广泛的推广应用。近20多年来,模糊控制不论在理论上还是技术上都有了长足的进步,成为自动控制领域一个非常活跃而又硕果累累的分支。其典型应用涉及生产和生活的许多方面,例如在家用电器设备中有模糊洗衣机、空调、微波炉、吸尘器、照相机和摄录机等;在工业控制领域中有水净化处理、发酵过程、化学反应釜、水泥窑炉等;在专用系统和其它方面有地铁靠站停车、汽车驾驶、电梯、自动扶梯、蒸汽引擎以及机器人的模糊控制。

   模糊控制将人的经验知识转化为控制策略,不要求精确的数学模型,只需现场操作人员的经验知识,使模型难以确定的系统得以有效的控制,因此在对象参数发生变化的时候,模糊控制仍能达到较为满意的控制效果。但模糊控制的控制作用较粗糙,无法从根本上消除静态误差,控制精度较低,于是把模糊控制整合到PID控制器中,既保持了PID控制器的结构简单、适用性强和整定方便等优点,又通过智能技术调整了PID控制器的参数,以适应被控对象特性的变化。考虑到控制规则的灵活与细致性兼顾其简单与易行的要求,这里选取七个语言等级作为本文所设计的模糊控制器的语言等级,从负的最大到正的最大依次为:负大(NB)、负中(NM)、负小(NS)、零(ZO)、正小(PS)、正中(PM)、正大(PB)。

    常用的隶属函数有矩形分布、梯形分布、三角形分布、柯西分布和正态分布等。隶属函数曲线的形状会导致不同的控制特性,隶属度函数曲线形状较尖的模糊子集器分辨率较高,控制灵敏度也较高;相反,隶属度函数曲线形状较缓,控制特性也较平缓,系统稳定性也较好。因此在选择模糊变量的模糊隶属函数时,在误差较大的区域采用低分辨率的模糊集,在误差较小的区域采用高分辨率的模糊集。

   模糊规则是指根据人的直觉思维推理,依据系统输出的误差及误差的变化趋势来消除系统误差的控制规则,它是由专家或者经验人员总结出来的。控制规则的基本形式为

74702c21e78f9316d1d17824472cabed_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

    建立模糊控制规则表的基本原则是:当误差大或较大时,选取控制量以尽快消除误差为主;而当误差较小时,选取控制量要注意防止超调,以系统的稳定性为主要出发点。误差为正时与误差为负时相类同,相应的符号都要变化。 模糊规则表如下所示:

d9e646a1e5578c77cc04318cf79b1594_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png
3480b875e3311eaa5936fc471f77fb06_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png
97444e63e4665703c8077f3235f8bf1e_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png
af7f5042997da55fb4450d9b8166dfac_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

2.仿真效果预览
matlab2022a仿真结果如下:

ab4e9dbbaabd385df50cc274022e21e5_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

3.MATLAB核心程序

        -1  -1   -1   -1  -1   -0.8 -0.6 -0.4 -0.2   0  0.2;
        -1  -1   -1   -1  -0.8 -0.6 -0.4 -0.2   0   0.2 0.4;
        -1  -1   -1  -0.8 -0.6 -0.4 -0.2   0   0.2  0.4 0.6;
        -1  -1  -0.8 -0.6 -0.4 -0.2   0   0.2  0.4  0.6 0.8;
        -1 -0.8 -0.6 -0.4 -0.2   0   0.2  0.4  0.6  0.8  1;
      -0.8 -0.6 -0.4 -0.2   0   0.2  0.4  0.6  0.8   1   1;
      -0.6 -0.4 -0.2   0   0.2  0.4  0.6  0.8   1    1   1;
      -0.4 -0.2   0   0.2  0.4  0.6  0.8   1    1    1   1;
      -0.2  0    0.2  0.4  0.6  0.8   1    1    1    1   1;
       0   0.2   0.4  0.6  0.8   1    1    1    1    1   1]*gu*gf;
 
% Next, we define some parameters for the fuzzy inverse model
 
gye=1/2;,gyc=1/2;
 
gp=0.2;
 
numye=11;     % Number of input membership functions for the ye
            % universe of discourse
numyc=11;     % Number of input membership functions for the yc
            % universe of discourse
 
wye=0.2*(1/gye);    % Sets the width of the membership functions for
                    % ye from center to extremes
wyc=0.2*(1/gyc);    % Sets the width of the membership functions for
                    % yc from center to extremes
invbase=0.4*gp; % Sets the base of the output membership functions
 
cye=[-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1]*(1/gye);
 
% For change in error input for learning mechanism
cyc=[-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1]*(1/gyc);
 
........................................................................
 
ym(index)=(1/(2+a_r*step))*((2-a_r*step)*ymold+...
                                    k_r*step*(r(index)+rold));
 
ymold=ym(index);
rold=r(index);
 
 
c_count=0;,e_count=0;   % These are used to count the number of
                        % non-zero mf certainitie of e and c
e=r(index)-y(index);
            % Calculates the error input for the fuzzy controller
c=(e-eold)/step;
    % Calculates the change in error input for the fuzzy controller
eold=e;
 
 
    if e<=ce(1)        % Takes care of saturation of the left-most
                    % membership function
         mfe=[1 0 0 0 0 0 0 0 0 0 0]; % i.e., the only one on is the
                                       %left-most one
     e_count=e_count+1;,e_int=1;       %  One mf on, it is the
                                       %left-most one.
    elseif e>=ce(nume)                  % Takes care ofsaturation
                                      %of the right-most mf
     mfe=[0 0 0 0 0 0 0 0 0 0 1];
     e_count=e_count+1;,e_int=nume; % One mf on, it is the
                                     %right-most one
    else      % In this case the input is on the middle part of the
 
       for i=1:nume
         if e<=ce(i)
          mfe(i)=max([0 1+(e-ce(i))/we]);
 
            if mfe(i)~=0
 
             e_count=e_count+1;
             e_int=i;    % This term holds the index last entry
                         % with a non-zero term
            end
         else
          mfe(i)=max([0,1+(ce(i)-e)/we]);
                                  % In thiscase the input is to the
                                  % right ofthe center ce(i)
            if mfe(i)~=0
             e_count=e_count+1;
             e_int=i;  % This term holds the index of the
                        % last entry with a non-zero term
            end
         end
        end
    end
 
 
meme_count=[e_count meme_count(1:9)];
meme_int=[e_int meme_int(1:9)];
相关文章
|
3月前
|
数据可视化
基于MATLAB的OFDM调制发射与接收仿真
基于MATLAB的OFDM调制发射与接收仿真
|
2月前
|
5G
基于IEEE 802.11a标准的物理层MATLAB仿真
基于IEEE 802.11a标准的物理层MATLAB仿真
193 0
|
2月前
|
算法
基于MATLAB/Simulink平台搭建同步电机、异步电机和双馈风机仿真模型
基于MATLAB/Simulink平台搭建同步电机、异步电机和双馈风机仿真模型
|
2月前
|
机器学习/深度学习 算法 数据可视化
基于MVO多元宇宙优化的DBSCAN聚类算法matlab仿真
本程序基于MATLAB实现MVO优化的DBSCAN聚类算法,通过多元宇宙优化自动搜索最优参数Eps与MinPts,提升聚类精度。对比传统DBSCAN,MVO-DBSCAN有效克服参数依赖问题,适应复杂数据分布,增强鲁棒性,适用于非均匀密度数据集的高效聚类分析。
|
2月前
|
开发框架 算法 .NET
基于ADMM无穷范数检测算法的MIMO通信系统信号检测MATLAB仿真,对比ML,MMSE,ZF以及LAMA
简介:本文介绍基于ADMM的MIMO信号检测算法,结合无穷范数优化与交替方向乘子法,降低计算复杂度并提升检测性能。涵盖MATLAB 2024b实现效果图、核心代码及详细注释,并对比ML、MMSE、ZF、OCD_MMSE与LAMA等算法。重点分析LAMA基于消息传递的低复杂度优势,适用于大规模MIMO系统,为通信系统检测提供理论支持与实践方案。(238字)
|
3月前
|
传感器 算法 数据挖掘
基于协方差交叉(CI)的多传感器融合算法matlab仿真,对比单传感器和SCC融合
基于协方差交叉(CI)的多传感器融合算法,通过MATLAB仿真对比单传感器、SCC与CI融合在位置/速度估计误差(RMSE)及等概率椭圆上的性能。采用MATLAB2022A实现,结果表明CI融合在未知相关性下仍具鲁棒性,有效降低估计误差。
232 15
|
3月前
|
监控
基于MATLAB/Simulink的单机带负荷仿真系统搭建
使用MATLAB/Simulink平台搭建一个单机带负荷的电力系统仿真模型。该系统包括同步发电机、励磁系统、调速系统、变压器、输电线路以及不同类型的负荷模型。
493 5
|
3月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于WOA鲸鱼优化的XGBoost序列预测算法matlab仿真
基于WOA优化XGBoost的序列预测算法,利用鲸鱼优化算法自动寻优超参数,提升预测精度。结合MATLAB实现,适用于金融、气象等领域,具有较强非线性拟合能力,实验结果表明该方法显著优于传统模型。(238字)
|
3月前
|
算法 新能源 测试技术
基于PID控制器和电流控制器的电池充电比较研究(Matlab代码实现)
基于PID控制器和电流控制器的电池充电比较研究(Matlab代码实现)
170 3
|
3月前
|
机器学习/深度学习 存储 算法
【水下机器人建模】基于QLearning自适应强化学习PID控制器在AUV中的应用研究(Matlab代码实现)
【水下机器人建模】基于QLearning自适应强化学习PID控制器在AUV中的应用研究(Matlab代码实现)
328 0

热门文章

最新文章