基于matlab实现生成模糊fis文件,包括模糊隶属函数和模糊规则等,不使用fuzzy工具箱

简介: 基于matlab实现生成模糊fis文件,包括模糊隶属函数和模糊规则等,不使用fuzzy工具箱

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

bfcbda56d09369657d8313c8fa359fb3_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png
a01d8b062b41571883e4dbc414051550_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png
c7ec685c85de6ca2124a6200380b4b43_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

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

   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)。

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

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

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

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



3.MATLAB核心程序

rulea = [7,7,7,7,7,4,4,
         7,7,7,7,6,4,4,
         6,6,6,6,4,3,3,
         6,6,5,4,3,2,2,
         5,5,4,3,2,2,2,
         4,4,2,1,1,1,1,
         4,4,2,1,1,1,1];
%% 定义输入输出变量,并赋值
tip= newfis('fuzzy');      %创建一个模糊推理系统(FIS)
A1=-3;B1=3;                %定义e的取值范围[A1,B1]
C1=(B1-A1)/6;              %6为变量个数-1
A2=-6;B2=6;                %定义ec的取值范围[A2,B2]
C2=(B2-A2)/6;              %6为变量个数-1
A3=-9;B3=9;                %定义u的取值范围[A3,B3]
C3=(B3-A3)/6;              %6为变量个数-1
%% 编写输入输出变量,  均分论域
%设置输入参数e
tip = addvar(tip, 'input','e',[A1,B1]); 
tip = addmf(tip,'input',1,'NB','trimf',[A1,A1,A1+C1]);
% tip = addmf(tip,'input',1,'NB','zmf',[A1,A1+C1]);
tip = addmf(tip,'input',1,'NM','trimf',[A1,A1+C1,A1+2*C1]);
tip = addmf(tip,'input',1,'NS','trimf',[A1+C1,A1+2*C1,A1+3*C1]);
tip = addmf(tip,'input',1,'ZE','trimf',[A1+2*C1,A1+3*C1,A1+4*C1]);
tip = addmf(tip,'input',1,'PS','trimf',[A1+3*C1,A1+4*C1,A1+5*C1]);
tip = addmf(tip,'input',1,'PM','trimf',[A1+4*C1,A1+5*C1,B1]);
% tip = addmf(tip,'input',1,'PB','smf',[A1+5*C1,B1]);
tip = addmf(tip,'input',1,'PB','trimf',[A1+5*C1,B1,B1]);
................................................................
%% 模糊规则
rulelist = [ 1,1,rulea(1),1,1;          %模糊规则,共49条
             1,2,rulea(2),1,1;
             1,3,rulea(3),1,1;
             1,4,rulea(4),1,1;
             1,5,rulea(5),1,1;
             1,6,rulea(6),1,1;
             1,7,rulea(7),1,1;
             
             2,1,rulea(8),1,1;
             2,2,rulea(9),1,1;
             2,3,rulea(10),1,1;
             2,4,rulea(11),1,1;
             2,5,rulea(12),1,1;
             2,6,rulea(13),1,1;
             2,7,rulea(14),1,1;
             
             3,1,rulea(15),1,1;
             3,2,rulea(16),1,1;
             3,3,rulea(17),1,1;
             3,4,rulea(18),1,1;
             3,5,rulea(19),1,1;
             3,6,rulea(20),1,1;
             3,7,rulea(21),1,1;
.................................................................
             
             6,1,rulea(36),1,1;
             6,2,rulea(37),1,1;
             6,3,rulea(38),1,1;
             6,4,rulea(39),1,1;
             6,5,rulea(40),1,1;
             6,6,rulea(41),1,1;
             6,7,rulea(42),1,1;
             
             7,1,rulea(43),1,1;
             7,2,rulea(44),1,1;
             7,3,rulea(45),1,1;
             7,4,rulea(46),1,1;
             7,5,rulea(47),1,1;
             7,6,rulea(48),1,1;
             7,7,rulea(49),1,1;    
相关文章
matlab读取csv文件csvread()
matlab读取csv文件csvread()
|
5天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于负相关误差函数的4集成BP神经网络matlab建模与仿真
**算法预览:** 图像显示无水印的2022a版MATLAB运行结果 **软件版本:** MATLAB 2022a **核心代码片段:** 省略展示 **理论概述:** NCL集成BP网络利用负相关提升泛化,结合多个弱模型减少错误关联。通过λ参数控制模型间负相关程度,λ>0增强集成效果,提高预测准确性和系统稳健性。
|
13天前
|
算法 计算机视觉 异构计算
基于FPGA的图像一维FFT变换IFFT逆变换verilog实现,包含tb测试文件和MATLAB辅助验证
```markdown ## FPGA 仿真与 MATLAB 显示 - 图像处理的 FFT/IFFT FPGA 实现在 Vivado 2019.2 中仿真,结果通过 MATLAB 2022a 展示 - 核心代码片段:`Ddddddddddddddd` - 理论:FPGA 实现的一维 FFT/IFFT,加速数字信号处理,适用于高计算需求的图像应用,如压缩、滤波和识别 ```
|
2月前
|
机器学习/深度学习 算法 安全
m基于Qlearning强化学习工具箱的网格地图路径规划和避障matlab仿真
MATLAB 2022a中实现了Q-Learning算法的仿真,展示了一种在动态环境中进行路线规划和避障的策略。Q-Learning是强化学习的无模型方法,通过学习动作价值函数Q(s,a)来优化智能体的行为。在路线问题中,状态表示智能体位置,动作包括移动方向。通过正负奖励机制,智能体学会避开障碍物并趋向目标。MATLAB代码创建了Q表,设置了学习率和ε-贪心策略,并训练智能体直至达到特定平均奖励阈值。
61 15
|
1月前
|
算法 计算机视觉 异构计算
基于FPGA的图像直方图均衡化处理verilog实现,包含tb测试文件和MATLAB辅助验证
摘要: 在FPGA上实现了图像直方图均衡化算法,通过MATLAB2022a与Vivado2019.2进行仿真和验证。核心程序涉及灰度直方图计算、累积分布及映射变换。算法旨在提升图像全局对比度,尤其适合低对比度图像。FPGA利用可编程增益器和查表技术加速硬件处理,实现像素灰度的均匀重分布,提升视觉效果。![image preview](https://ucc.alicdn.com/pic/developer-ecology/3tnl7rfrqv6tw_a075525027db4afbb9c0529921fd0152.png)
|
13天前
|
算法 数据可视化 数据挖掘
MATLAB中常用的数学函数及其应用示例
MATLAB中常用的数学函数及其应用示例
|
2月前
|
算法 计算机视觉 异构计算
基于肤色模型的人脸识别FPGA实现,包含tb测试文件和MATLAB辅助验证
这是一个关于肤色检测算法的摘要:使用MATLAB 2022a和Vivado 2019.2进行测试和仿真,涉及图像预处理、RGB到YCbCr转换、肤色模型(基于阈值或概率)以及人脸检测。核心程序展示了如何读取图像数据并输入到FPGA处理,通过`tops`模块进行中值滤波、颜色空间转换及人脸检测,最终结果输出到"face.txt"。
|
2月前
|
算法 异构计算
基于直方图的图像曝光量分析FPGA实现,包含tb测试文件和MATLAB辅助验证
该内容包括了算法的运行效果展示、软件版本信息、理论概述和核心程序代码。在正常图像中,`checkb`位于`f192b`和`f250b`之间,而多度曝光图像中`checkb`超出此范围,判断为曝光过度。使用的软件为Vivado 2019.2和MATLAB 2022a。理论依据未详细给出,但提及主要方法。提供的Verilog代码段用于处理图像数据,包括读取文件、时钟控制及图像histogram计算等,其中模块`im_hist`似乎是关键部分。
|
2月前
|
Serverless
基于Logistic函数的负荷需求响应(matlab代码)
基于Logistic函数的负荷需求响应(matlab代码)