当前位置:科技动态 > 使用MATLAB生成模糊控制离线查询表

使用MATLAB生成模糊控制离线查询表

  • 发布:2023-10-10 10:47

-->

  实时采样得到的数据经过模糊处理后输入机器,通过查询模糊规则表即可得到合适的输出模糊量,从而避免了近似推理过程。在实际应用中,特别是当控制系统比较简单且由单片机控制时,常常采用这种查表方法。

  模糊控制表的计算方法有很多种,手动编程计算会非常繁琐。 MATLAB提供了evalfis函数用于模糊推理计算,也可以使用SystemTest自动生成模糊控制表。请注意,MATLAB 2016a 将不再包含此功能,可以由单元测试框架或 Simulink Test 替代。

   以双输入单输出系统为例,计算模糊控制器的查找表。假设控制器的输入是误差e和误差变化率ec,输出是控制变量u。其讨论的基本域是 [emin, emax], [ec min, ecmax], [u min, umax],语言变量E、EC和U对应的论域为{- 6,-5,…,-1,0,1,…,5 ,6},E、EC和U均选择7个语言值{NB、NM、NS、Z、PS、PM、PB},每个语言值的隶属函数采用三角函数。其分布如表1所示,控制规则如表2所示。

表1 语言变量E、EC、U赋值表

表2 模糊控制规则表

  1。在MATLAB中输入fuzzy打开模糊控制工具箱,编辑输入输出变量的隶属函数和模糊控制规则,然后将模糊推理系统保存为test.fis。

  采用最大值法(lom)来解决模糊(最大隶属度)。如果模糊集合的论域中有多个点u都具有最大值,则可以将这些点中坐标绝对值最大的点ulom作为模糊集的代表点放。这种方法称为最大隶属度法。

  输入量和输出量的隶属函数均采用三角函数,如下图:

  2。打开Simulink模块并创建如下图所示的系统框图。添加2个输入和1个输出端口,处理模块为Fuzzy Logic Controller(或带有Ruleviewer的Fuzzy Logic Controller)。

  

  在MATLAB命令窗口中输入fuzzy_control=readfis(‘test’)将之前建立的模糊控制器加载到工作区中,将Simulink中模糊控制模块的参数设置为fuzzy_control,并将模型保存为fuzzy_model.mdl。

  3。在Simulink界面菜单栏的Tools下拉菜单中找到SystemTest,打开测试界面。选择Main Test,菜单栏Insert→Test Element→Simulink,选择第二步建立的模型fuzzy_model。

  在Test Vectors项中添加两个测试向量(点击New):变量名称分别为input1和input2。将两个输入变量的取值范围编辑为[-6:1:6],根据输入向量维度测试将循环169次;在Test Variables中定义测试变量,输出变量名。

  下一步是变量映射。将测试向量input1和input2分别映射到模糊控制器的输入端口In1和In2作为输入测试信号。将测试变量输出映射到模糊控制器输出端口 Out1。设置后的界面如下图。

  最后选择要保存的测试数据。点击测试界面的保存结果项,设置如下:

  

  4。单击“运行”以运行测试。 Main Test将执行169次迭代并等待测试结束。

  测试成功完成后,可以查看测试结果数据集:

test_data=stresults.ResultsDataSet.output;
温度=零(169,1);
对于 i=1:169
temp(i)=test_data{i}(6);
结束
表数据=重塑(a,13,13);

  在工作区窗口中右键单击table_data变量,选择“打开选择”即可查看模糊控制查询表:

  

  SystemTest还提供图形结果查看功能。在系统测试界面,点击Tools→Test Results Viewer,点击工具栏中的Surf Plot,绘制三维曲面。 X、Y 和 Z 分别设置为输入 1、输入 2 和输出。点击Plot按钮,根据输入输出绘制的曲面如下图:

  这里还可以导出控制表:右键单击输出变量output,在弹出的菜单中点击导出,即可输出到工作区。

  输出包含6个13X13的二维表,我们列出第六个:

  输入表=输出(:,:,6);生成表变量后,点击Open Selection即可查看模糊控制表:

  5。模糊系统的输出也可以使用 evalfis 函数根据给定的输入进行计算。例如,以下语句计算当E=6且EC=3时模糊系统测试的输出。可以看到结果与上面的模糊控制查询表一致。

fuzzy_control = readfis('测试');
evalfis([-6 3], fuzzy_control)
答案=
-4.9200

  evalfis还可以同时计算多组输入的结果,如:

evalfis([-3 6;-2 6],fuzzy_control)
答案=
3.0000
2.0400

参考:

计算模糊控制离线查找表

在 SIMULINK 中根据模糊逻辑生成查找表

基于Matlab的模糊查询表生成方法探讨

如何使用matlab将模糊逻辑转换成查询表

使用MATLAB生成离线查询表进行模糊控制

如何在MATLAB下将模糊推理系统转换为查询表

-->

相关文章

最新资讯