【智能控制实验】MATLAB代码编译环境与MATLAB命令设计模糊控制器

2023-11-07

MATLAB代码编译环境与MATLAB命令设计模糊控制器

一、实验要求:

重点学习MATLAB系统仿真软件的使用和模糊控制器工作原理,并应用MATLAB命令进行模糊控制器设计,完成模糊控制查询表的实现、模糊控制在线运行代码的实现。

已知:

1.1 E、EC和U的论域:{-6,-5,…,-1,0,1,…,5,6};E、EC和U定义了7个语言值{NB,NM,NS,Z,PS,PM,PB};

1.2 各语言值的隶属函数采用三角函数,其分布可用下表表示:

img

1.3 控制规则表:

image-20211230155710527

二、实验内容

2.1 模糊控制查询表的实现:

FuzzyTable :

**function** Fuzzy_Table=FuzzyTable() 
*%一、初始化语言值、隶属函数、规则表矩阵* 
 
*%7个语言值{NB,NM,NS,Z,PS,PM,PB};* 
Input1_Terms=[1,2,3,4,5,6,7]; 
Input2_Trems=[1,2,3,4,5,6,7]; 
Output_Terms=[1,2,3,4,5,6,7]; 
 
 
*%各语言值的隶属函数(三角函数)* 
Input1_Terms_Membership = [ 1,0.5,0,0,0,0,0,0,0,0,0,0,0; 
              0,0.5,1,0.5,0,0,0,0,0,0,0,0,0; 
              0,0,0,0.5,1,0.5,0,0,0,0,0,0,0; 
              0,0,0,0,0,0.5,1,0.5,0,0,0,0,0; 
              0,0,0,0,0,0,0,0.5,1,0.5,0,0,0; 
              0,0,0,0,0,0,0,0,0,0.5,1,0.5,0; 
              0,0,0,0,0,0,0,0,0,0,0,0.5,1]; 
Input2_Terms_Membership=Input1_Terms_Membership; 
Output_Terms_Membership=Input1_Terms_Membership; 
 
*%规则表矩阵* 
Rule= [1,1,1,1,2,4,4; 
1,1,1,1,2,4,4; 
2,2,2,2,4,5,5; 
2,2,3,4,5,6,6; 
3,3,4,6,6,6,6; 
4,4,6,7,7,7,7; 
4,4,6,7,7,7,7]; 
 
*%二、求解模糊关系* 
 
 *%初始化R* 
**for** i=1:169 
  **for** j=1:13 
    R(i,j)=0; 
   end 
end 
 
**for** Input1_Terms_Index=1:7 
  **for** Input2_Terms_Index=1:7 
    *%Input1_Terms_Index 代表输入E的语言值的序号,Input2_Terms_Index* 
    *%代表输入EC语言值的序号,Output_Terms_Index 代表输出U语言值的序号* 
    Output_Terms_Index=Rule(Input1_Terms_Index,Input2_Terms_Index); 
 
    *%A代表输入E的模糊值(隶属函数),B代表输入EC的模糊值,C代表输出U的模糊值* 
    A=Input1_Terms_Membership(Input1_Terms_Index,:); 
    B=Input2_Terms_Membership(Input2_Terms_Index,:); 
    C=Output_Terms_Membership(Output_Terms_Index,:); 
 
    *%规则库中第i条控制规则:* 
    *%Ri: IF E is Ai AND EC is Bi THEN U is Ci* 
    *%蕴含的模糊关系为:* 
    *% Ri = (Ai× Bi) ×Ci* 
 
    *%求解模糊关系* 
 
    *%R1=A×B* 
    **for** i=1:13 
      **for** j=1:13 
        R1(i,j)=min(A(i),B(i)); 
      end 
    end 
 
    *%disp(R1)* 
 
    *%R2=R1^T(变为列向量)* 
    R2=[]; 
    **for** k=1:13 
      R2=[R2;R1(k,:)']; 
    end 
 
    *%disp(R2)* 
     
    *%R3=R2×C* 
    **for** i=1:169 
      **for** j=1:13 
        R3(i,j)=min(R2(i),C(j)); 
      end 
    **end**       
    R=max(R,R3); 
 
  end 
end 

disp®;

image-20211230161940877
%三、总结模糊查询表* 

**for** Input1_value_index=1:13 
  **for** Input2_value_index=1:13 
    *%a)将输入的精确值E和EC模糊化* 
     
    *%注:Input1_value_index表示输入E的精确值的序号,* 
    *%Input1_value_membership为E的精确值属于其各个模糊值的隶属度组成的向量(列)* 
    Input1_value_membership=Input1_Terms_Membership(:,Input1_value_index); 
     
    *%注:Max_Input1_index表示隶属度最大的模糊值的序号,Max_Input1_value为* 
    *%与之对应的隶属度* 
    [Max_Input1_value,Max_Input1_index]=max(Input1_value_membership); 
     
    *%注:Ad为与输入E的精确值相对应的隶属度最大的模糊值,也就是模糊化后的E* 
    *%的模糊值。(行)* 
    Ad=Input1_Terms_Membership(Max_Input1_index,:); 
     
    *%同理得到EC模糊化后的模糊值Bd* 
    Input2_value_membership=Input2_Terms_Membership(:,Input2_value_index); 
    [Max_Input2_value,Max_Input2_index]=max(Input2_value_membership); 
    Bd=Input2_Terms_Membership(Max_Input2_index,:); 
     
    *%b)推理* 
     
    *%Rd1=Ad×Bd* 
    **for** i=1:13 
      **for** j=1:13 
        Rd1(i,j)=min(Ad(i),Bd(j)); 
      end 
    end 
     
    *%Rd2=Rd1^T(变为行向量)* 
     
    Rd2=[]; 
    **for** k=1:13 
      Rd2=[Rd2,Rd1(k,:)]; 
    end 
     
    *%Cd=Rd2 o R,Cd为推理后得到的模糊输出*  
    **for** j=1:13 
      Cd(j)=max(min(Rd2',R(:,j))); 
    end 
     
    disp(Cd) 
    sum1=0; 
    sum2=0; 
    Output = [-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6]; 
    **for** i=1:13 
    sum1=sum1+Cd(i); 
    sum2=sum2+Cd(i)*Output(i); 
    end 
    OUT=round(sum2/sum1); 
    OUT 
    Fuzzy_Table(Input1_value_index,Input2_value_index)=OUT; 
     
  end 
**end

img

2.2 模糊控制在线运行代码实现:

**function** u=FuzzyControl(e,ec) 
*%定义el,eh,ech,ecl,uh,ul论域长度m* 
el=-1,eh=1,ecl=-1,ech=1,m=13,ul=-1,uh=1,l=6; 
ke=2*m/(eh-el); 
kec=2*m/(ech-ecl); 
Ku=(uh-ul)/2*l; 
E=round(ke*(e-(eh+el)/2)); *%将E的论域转换到模糊控制器的论域* 
**if** E>6 
E=6; 
**elseif** E<-6 
E=-6; 
end 
EC=round(kec*(ec-(ech+ecl)/2)); *%将EC的论域转换到模糊控制器的论域* 
**if** EC>6 
EC=6; 
**elseif** EC<-6 
EC=-6; 
end 
Fuzzy_Table = FuzzyTable(); 
U=Fuzzy_Table(E+7,EC+7); *%查模糊控制查询表得到输出值U* 
u=Ku*U+(uh+ul)/2; *%将输出转换到实际论域*

三、运行结果及分析

3.1、主函数:

%随机十组e和ec,通过模糊控制代码得到输出u

**for** i=1:10 
  e=unifrnd (-1,1); 
  ec=unifrnd (-1,1); 
  u = FuzzyControl(e,ec); 
  answer(i)=u; 
end 
 
disp(answer)

3.2、运行结果

e和ec的随机取值(第一列e,第二列ec)

image-20211230162009340

模糊控制处理结果:

img

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【智能控制实验】MATLAB代码编译环境与MATLAB命令设计模糊控制器 的相关文章

  • 如何找到平面和 3d 矩阵之间的交平面

    如果我有一堆图像并且尺寸如下 size M 256 256 124 我有 3 个点 它们的坐标是 coor a 100 100 124 coor b 256 156 0 coor c 156 256 0 如何创建 M 与这 3 个点定义的平
  • 通过 Matlab 访问 Physionet 的 ptbdb 中的数据库

    我首先设置系统 old path which rdsamp if isempty old path rmpath old path 1 end 8 end wfdb url http physionet org physiotools ma
  • 如何更改Plotyy第二轴的颜色和字体大小?

    我使用 MATLAB 的plotyy 函数绘制了两条曲线 AX H1 H2 plotyy voltage span amplitude voltage span Ca SR The problem is that I cannot chan
  • 如何在 MATLAB 中绘制 3D 曲面图?

    我有一个像这样的数据集 0 1 0 2 0 3 0 4 1 10 11 12 13 2 11 12 13 14 3 12 13 14 15 4 13 14 15 16 我想在 matlab 中绘制 3D 曲面图 使列标题位于 y 轴 行标题
  • 有效地绘制大时间序列(matplotlib)

    我正在尝试使用 matplotlib 在同一轴上绘制三个时间序列 每个时间序列有 10 6 个数据点 虽然生成图形没有问题 但 PDF 输出很大 在查看器中打开速度非常慢 除了以栅格化格式工作或仅绘制时间序列的子集之外 还有其他方法可以获得
  • MATLAB 中的霍夫变换

    有谁知道如何使用霍夫变换来检测二值图像中最强的线 A zeros 7 7 A 6 10 18 24 36 38 41 1 使用 rho theta 格式 其中 theta 以 45 为步长 从 45 到 90 以及如何在 MATLAB 中显
  • 在matlab中绘制给定区域内(两个圆之间)的向量场

    我想在 Matlab 中绘制下面的向量场 u cos x x 0 y y 0 v sin x x 0 y y 0 我可以在网格中轻松完成 例如 x 和 y 方向从 2 到 2 x 0 2 y 0 1 x y meshgrid 2 0 2 2
  • 图像处理 - 使用 opencv 进行服装分割

    我正在使用 opencv 进行服装特征识别 第一步 我需要通过从图像中移除脸部和手来分割 T 恤 任何建议表示赞赏 我建议采用以下方法 Use 阿德里安 罗斯布鲁克的用于检测皮肤的皮肤检测算法 谢谢罗莎 格隆奇以获得他的评论 在方差图上使用
  • 检测数据集中线性行为的算法

    我已经发布了一个关于对数据集的一部分进行多项式拟合的算法 https stackoverflow com q 17595932 2320757前一段时间收到一些建议去做我想做的事 但我现在面临另一个问题 我尝试应用答案中建议的想法 我的目标
  • Matlab dec2bin 给出错误的值

    我正在使用 Matlab 的 dec2bin 将十进制数转换为二进制字符串 但是 我得到了错误的结果 例如 gt gt dec2bin 13339262925365424727 ans 101110010001111010010100111
  • MATLAB 类的 Description 和DetailedDescription 属性

    内置 MATLAB 类具有 Description 和 DetailedDescription 属性的值 gt gt handle ans meta class handle Package meta Properties Name han
  • 在 C++ 中使用 matlab 结构(matlab 函数调用的返回值)(由 matlab 编译器生成的库)

    你好 我有一个相当简单的 matlab 函数 例如 function MYSTRUCT myfunc MYSTRUCT prop1 test MYSTRUCT prop2 foo MYSTRUCT prop3 42 end 我用 matla
  • 读出 Matlab / Octave fft2() 函数输出的特定点

    我正在熟悉 Octave 及其功能fft2 在此玩具示例中 我的目标是生成以下 256 x 256 png 图像的 2D DFT 为了能够轻松理解输出 我尝试将此图像转换为 256 x 256 图像 消除颜色信息 Im imread cir
  • Matlab:如何在没有颜色分级的情况下绘图?

    我的朋友制作了一个脚本来处理大量数据并绘制各种图表 但是当他运行脚本时 图表根据图例具有不同的颜色 当我这样做时 所有图表都相似 颜色渐变从黑色到红色的 见图 为什么不同以及如何获得不同颜色的图表 带有颜色分级图的 2D 绘图 figure
  • 如何使用matlab创建正态分布

    供参考 我有一些关于机器维护计划 用于翻新和大修机器 从时间表中可以看到每台机器何时进行重新检查和大修的信息 每年都有机器重修或大修的实际日期和到期日期 作为例子 machine 1 实际日期 2 1 记录 截止日期 12 1 实际日期 1
  • 使用嵌套 if 子句向量化循环

    Problem 我正在尝试优化代码的运行时 并且之前曾提出过类似的问题 其中包括几个嵌套的 if 语句 向量化嵌套 if 语句 https stackoverflow com questions 38125770 vectorizing n
  • 根据不规则数据绘制曲面

    我正在从分散的数据集中绘制填充轮廓图或曲面图 与其他 Q 的主要区别在于数据不是凸的 r th meshgrid 10 15 0 180 x y deal r sind th r cosd th z x 2 y 2 scatter x y
  • 如何在 Matlab 中绘制连通性/邻接矩阵图?

    我想在 MATLAB 中绘制网络 电网 的结构图 我有一个包含每个分支的往返节点的列表 我没有节点的坐标 并且每次模拟的系统拓扑都会发生变化 我还需要能够为各种线路 节点分配不同的颜色 以可视化电压问题或过载等 类似于我使用传记 下面的代码
  • 评估函数卷积时出错

    这是我第一次尝试用 matlab 编写任何东西 所以请耐心等待 我正在尝试评估以下 ODE 的解 w N w w f t 与柯西条件 w 0 w 0 0 这里 N 是给定的非线性函数 f 是给定的源 我也需要这个功能 其中 G 是以下 OD
  • Matlab中反转一位逻辑位

    是否存在更好的方法来反转 X 的元素 gt gt X dec2bin 10 X 1010 我这样做了 x i num2str 1 str2num x i 如果我理解正确的话 你想将一位设置为 1 使用bitset bitset x bitN

随机推荐

  • [机器学习与数据分析] 时间序列聚类方法

    聚类分析 cluster analysis 简称聚类 clustering 是根据事物自身的特性对被聚类对象进行类别划分的统计分析方法 其目的是根据某种相似度度量对数据集进行划分 将没有类别的数据样本划分成若干个不同的子集 这样的一个子集称
  • python爬虫之正则表达式练习——爬取百度图片

    1 明确需求 创建环境 第一步 明确需求 转换图片 需求 爬取百度图片中关于森林的图片 并保存 网址 https image baidu com search index tn baiduimage ipn r ct 201326592 c
  • C+++string类如何判断字符串为空

    string类是C STL类之一 有很丰富的接口 判断string为空是经常用到的操作 string类为空 实际也就是元素为0个 可以按照如下方式判断 1 string类有自己的成员函数empty 可以用来判断是否为空 string str
  • 函数及参数调用【Python-3】

    file author jUicE g2R qq 3406291309 彬 bin 必应 一个某双流一大学通信与信息专业大一在读的技术彩笔 brief python小白入门笔记 copyright 2022 8 COPYRIGHT 原创技术
  • maven编译时出现 There are test failures

    ERROR Failed to execute goal org apache maven plugins maven surefire plugin 2 10 test default test on project web nancha
  • UE4 通过函数名调用蓝图函数

    为了灵活 有时候需要通过函数名来调用本蓝图或其他蓝图中的函数 一般的用法如下 而通过函数名的用法如下 通过名称获取 设置变量的用法如下 通过名称获取 设置变量这个逻辑还是比较简单的 可以参考这里 http shootertutorial c
  • 【Nginx】基础概念和核心配置块

    文章目录 1 Nginx基础概念 2 命令和信号控制 2 1信号控制 2 2命令控制 3 Nginx核心配置文件结构 3 1全局块 3 1 1权限问题 3 1 2work process指令 3 1 3其他指令 3 2event块 3 3h
  • 遇到问题之-SecureCRT光标不显示鼠标消失终极解决办法

    SecureCRT有时候光标不显示 命令行编辑文档的时候特别麻烦 今天找出解决办法 选项 会话选项 仿真 将ANSI颜色选中 选项 会话选项 外观 将光标下的 使用颜色选中 闪烁选中 同时记得把颜色改成与背景色不同
  • C/C++代码缺陷静态检查工具cppcheck

    cppcheck介绍和安装 CppCheck是一个C C 代码缺陷静态检查工具 静态代码检查是检查代码是否安全和健壮 是否有隐藏问题 CppCheck只检查编译器检查不出来的bug 不检查语法错误 CentOS在线安装命令 yum inst
  • JVM初探:内存分配、GC原理与垃圾收集器

    http www importnew com 23035 html
  • MATLAB实现多元线性回归预测

    一 简单的多元线性回归 data txt 1 230 1 37 8 69 2 22 1 2 44 5 39 3 45 1 10 4 3 17 2 45 9 69 3 9 3 4 151 5 41 3 58 5 18 5 5 180 8 10
  • linux 下的 iptables/ netfilter 防火墙 深度理解 后篇

    一 概述 中篇已经提到了钩子函数的注册 也知道最终数据进来是通过钩子函数处理 来实现防火墙的功能的 那么netfilter 内核是在什么时候调用钩子函数 钩子函数又是怎么实现防火墙对应的功能的 本章主要讲钩子函数实现的过滤功能 二 调用钩子
  • 门控时钟电路(Intergrated clock gating)

    门控时钟 某些模块不需要工作的时候 为了降低功耗 需要关闭该模块的时钟 节省触发器的翻转功耗 采用门控时钟电路来控制时钟的关断 本文大量引用了知乎门控时钟的图片和一些文字描述 简单的与门 最初的思路是采用一个使能信号en和一个与门来控制时钟
  • 恒玄BES调试笔记

    基于恒玄平台开发TWS耳机 常用的有BES2300系列 BES2500系列 以及即将开发的BES2600 其实都差不多 本笔记基于恒玄BES2500YA芯片给某大客户开发TWS耳机 是项目开发过程的一些笔记 由于博主精力有限 不喜欢长篇大论
  • 以太网是什么拓扑结构

    以太网采用的拓扑结构是总线型拓扑 以太网是一种计算机局域网技术 目前的快速以太网为了减少冲突 将能提高的网络速度和使用效率最大化 使用交换机来进行网络连接和组织 以太网是一种计算机局域网技术 IEEE组织的IEEE 802 3标准制定了以太
  • Html select标签

    Select 创建 Form 事件 属性 选中 创建 直接撸代码
  • PageHelper分页+排序

    PageHelper分页 排序 使用pageHelper插件来分页 只需在执行sql前用即可 String orderBy 排序字段 desc 按照 数据库 排序字段 倒序 排序 PageHelper startPage pageNum p
  • 二级缓存j2cache和SpringBoot整合

    简介 j2cache是开源的二级缓存库 支持实现 本地缓存Ehcache Caffeine 远程缓存Redis Memcached 常见解决方案 如一级缓存使用Ehcache 二级缓存使用Redis 上篇描述的阿里开源的jetcache 是
  • javascript读写本地sqlite数据库

    sqlite这种单文件数据库 类型简单功能强大效率也不错 非常适合单机软件开发 把一个我以前写的JavaScript sqlite数据库操作类分享给大家 还是先上代码 注释写的很清楚啦 支持增删改查 支持链式查询 使用的时候不用new sq
  • 【智能控制实验】MATLAB代码编译环境与MATLAB命令设计模糊控制器

    MATLAB代码编译环境与MATLAB命令设计模糊控制器 一 实验要求 重点学习MATLAB系统仿真软件的使用和模糊控制器工作原理 并应用MATLAB命令进行模糊控制器设计 完成模糊控制查询表的实现 模糊控制在线运行代码的实现 已知 1 1