m基于matlab的模糊控制器仿真实现,采用matlab编程方式定义模糊规则,隶属函数等

简介: m基于matlab的模糊控制器仿真实现,采用matlab编程方式定义模糊规则,隶属函数等

1.算法仿真效果
matlab2022a仿真结果如下:

e30a81e28b94e43df1dd32bd9887a404_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png
432d1765b036160047e01a2b7c06d84a_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png
3f2082585e493dae14a9b610fb1edb9f_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png
4112bd7a9e96e949b3a6b861019920e1_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

2.算法涉及理论知识概要

   利用模糊数学的基本思想和理论的控制方法。在传统的控制领域里,控制系统动态模式的精确与否是影响控制优劣的最主要关键。系统动态的信息越详细,则越能达到精确控制的目的。
   然而,对于复杂的系统,由于变量太多,往往难以正确的描述系统的动态,于是工程师便利用各种方法来简化系统动态,以达成控制的目的,但却不尽理想。换言之,传统的控制理论对于明确系统有强而有力的控制能力,但对于过于复杂或难以精确描述的系统,则显得无能为力了。因此便尝试着以模糊数学来处理这些控制问题。

模糊控制器包括四部分:
(1)模糊化。主要作用是选定模糊控制器的输入量,并将其转换为系统可识别的模糊量,具体包含以下三步:
第一,对输入量进行满足模糊控制需求的处理;
第二,对输入量进行尺度变换;
第三,确定各输入量的模糊语言取值和相应的隶属度函数。
(2)规则库。根据人类专家的经验建立模糊规则库。模糊规则库包含众多控制规则,是从实际控制经验过渡到模糊控制器的关键步骤。
(3)模糊推理。主要实现基于知识的推理决策。
(4)解模糊。主要作用是将推理得到的控制量转化为控制输出。

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

第一部分:控制存储器

这个部分比较简单,就是将当前时刻的数据进行保存,作为下一时刻的学习控制算法模块的输出的相加项,然后得到新输出。其对应的程序如下所示:

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

第二部分:被控对象

控制对象,在matlab编程的时候,我们一般使用的是传递函数来标示,在参考文献中,关于控制对象的介绍似乎没有讲,一般这种情况,我们设置一个传递函数作为控制对象来研究我们的控制算法。

很多研究控制算法的课题,如果不知道控制对象具体的传递函数表达式,我们一般都设置一个传递函数作为控制对象进行控制算法的研究,如果你在自己的论文中已经设计了一个控制对象的传递函数,那么直接替换即可。

在本课题中,控制对象的传递函数我们设置为如下的表达式:

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

第三部分:学习控制算法

这个部分是程序算法的重点,这里我们重点介绍 一下这个部分的实现过程。首先我们要做的是模糊PID控制器,论文中关于PID学习控制算法的主要表达式为:

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

    然后这里控制器采用模糊PID控制器,然后迭代过程采用公式6.3来进行。注意,由于加入遗忘因子的话,在模糊PID中,收敛值收敛到0会变得非常的困难,故这里我们使用不带遗忘因子的公式。 


3.MATLAB核心程序

a=setfis(a,'DefuzzMethod','mom'); 
writefis(a,'fuzzpid'); 
a=readfis('fuzzpid'); 
%显示规则
showrule(a) 
 
%%
%控制对象的设置
%采样时间
ts        = 0.002;
%产生连续形式的传递函数
Gp        = tf([16],[10,1.2,6]);
%产生离散形式的传递函数
Gpz       = c2d(Gp,ts,'z');
%将传递函数转换为差分式子
[num,den] = tfdata(Gpz,'v');
 
%%
%控制算法初始参数
L         = 100;
fai       = 0.1;
F         = 50;
%此变量分别保存误差,误差积分以及误差导数
Err       = [0,0,0]';
%延迟变量
y_1       = 0;
y_2       = 0;
u_1       = 0;
u_2       = 0;
e_1       = 0; 
ei        = 0;
ed        = 0;
%%
%迭代过程
Time      = 1001; 
u         = zeros(1,Time);      
Pk        = L*ones(1,Time);   
Ik        = fai*ones(1,Time);   
Dk        = F*ones(1,Time);   
M         = 8;
Ed        = 0.0; 
Ecd       = 0.0; 
for i=0:1:M
    for k=1:1:Time
        %产生时间变量
        time(k) = (k-1)*ts;
        %给定轨迹输入
        yd(k)   = 8*sin(6*2*pi*k*ts);
        
        %根据模糊规则,进行PID参数的更新
        k_pid   = evalfis([Ed,Ecd],a); 
        Pk(k)   = L  + k_pid(1); 
        Ik(k)   = fai+ k_pid(2); 
        Dk(k)   = F  + k_pid(3); 
        %控制对象模型的输出
.......................................................................
        %使用延迟程序起到存储器的功能
        u2(k)   = u(k);
        e_1     = e(k);
        y_2     = y_1;
        y_1     = y(k);
        u_2     = u_1;
        u_1     = u2(k);
        Ed      = e(k);
        Ecd     = e(k)-e_1;
    end    
    i=i+1;
end 
相关文章
|
22天前
|
数据可视化
基于MATLAB的OFDM调制发射与接收仿真
基于MATLAB的OFDM调制发射与接收仿真
|
12天前
|
机器学习/深度学习 算法 数据可视化
基于MVO多元宇宙优化的DBSCAN聚类算法matlab仿真
本程序基于MATLAB实现MVO优化的DBSCAN聚类算法,通过多元宇宙优化自动搜索最优参数Eps与MinPts,提升聚类精度。对比传统DBSCAN,MVO-DBSCAN有效克服参数依赖问题,适应复杂数据分布,增强鲁棒性,适用于非均匀密度数据集的高效聚类分析。
|
12天前
|
开发框架 算法 .NET
基于ADMM无穷范数检测算法的MIMO通信系统信号检测MATLAB仿真,对比ML,MMSE,ZF以及LAMA
简介:本文介绍基于ADMM的MIMO信号检测算法,结合无穷范数优化与交替方向乘子法,降低计算复杂度并提升检测性能。涵盖MATLAB 2024b实现效果图、核心代码及详细注释,并对比ML、MMSE、ZF、OCD_MMSE与LAMA等算法。重点分析LAMA基于消息传递的低复杂度优势,适用于大规模MIMO系统,为通信系统检测提供理论支持与实践方案。(238字)
|
27天前
|
传感器 算法 数据挖掘
基于协方差交叉(CI)的多传感器融合算法matlab仿真,对比单传感器和SCC融合
基于协方差交叉(CI)的多传感器融合算法,通过MATLAB仿真对比单传感器、SCC与CI融合在位置/速度估计误差(RMSE)及等概率椭圆上的性能。采用MATLAB2022A实现,结果表明CI融合在未知相关性下仍具鲁棒性,有效降低估计误差。
141 15
|
22天前
|
监控
基于MATLAB/Simulink的单机带负荷仿真系统搭建
使用MATLAB/Simulink平台搭建一个单机带负荷的电力系统仿真模型。该系统包括同步发电机、励磁系统、调速系统、变压器、输电线路以及不同类型的负荷模型。
349 5
|
23天前
|
机器学习/深度学习 算法
【概率Copula分类器】实现d维阿基米德Copula相关的函数、HACs相关的函数研究(Matlab代码实现)
【概率Copula分类器】实现d维阿基米德Copula相关的函数、HACs相关的函数研究(Matlab代码实现)
|
18天前
|
机器学习/深度学习 存储 算法
【水下机器人建模】基于QLearning自适应强化学习PID控制器在AUV中的应用研究(Matlab代码实现)
【水下机器人建模】基于QLearning自适应强化学习PID控制器在AUV中的应用研究(Matlab代码实现)
197 0
|
18天前
|
机器学习/深度学习 边缘计算 算法
【无人机】无人机群在三维环境中的碰撞和静态避障仿真(Matlab代码实现)
【无人机】无人机群在三维环境中的碰撞和静态避障仿真(Matlab代码实现)
109 0
|
23天前
|
存储 编解码 算法
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
【多光谱滤波器阵列设计的最优球体填充】使用MSFA设计方法进行各种重建算法时,图像质量可以提高至多2 dB,并在光谱相似性方面实现了显著提升(Matlab代码实现)
|
23天前
|
机器学习/深度学习 传感器 算法
【高创新】基于优化的自适应差分导纳算法的改进最大功率点跟踪研究(Matlab代码实现)
【高创新】基于优化的自适应差分导纳算法的改进最大功率点跟踪研究(Matlab代码实现)
140 14

热门文章

最新文章