《模糊控制实验.docx》由会员分享,可在线阅读,更多相关《模糊控制实验.docx(14页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上 中南大学模糊控制课程实验报告学生姓名: 彭雄威 指导教师: 袁 艳 学 院: 信息科学与工程学院 学 号: 专心-专注-专业 实验一:本系统设计基于MATLAB图形模糊推理系统,设计步骤如下:打开MATLAB,输入指令fuzzy,打开模糊逻辑工具箱的图形用户界面窗口,新建一个Mamdani模糊推理系统。(1) 增加一个输入变量,将输入变量命名为E、Ec,将输出变量命名U。这样就建立了一个两输入单输出的模糊推理系统。如图1.1所示。 图1.1增加一个输入变量(2) 设计模糊化模块:设计隶属度函数论域范围 图3.2设计水位误差E模块 3.3设计水位误差Ec模块 图3.4
2、设计水位输出U模块(4)模糊控制器的规则设计(5) 通过观察器观察规则情况在菜单view中的rules和surface选项分别对应得是规则观测器和曲面观测器。 图 3.7 规则观测器图 3.6 曲面观测器 (6) 保存编辑好的FIS文件实验二:利用MATLAB软件的M文件编辑器和实验一所生成的fuzzf.FIS文件,在M文件编辑器中输入:a=readfis(fuzzf);evalfis(-0.5,-0.07;-0.5,0;-0.5,0.07; 0, -0.07;0,0;0,0.07;0.5,-0.07;0.5,0;0.5,0.07,a)便可得fuzzf.FIS文件的模糊控制查询表,其中的数据在
3、水位误差E的论域为-1 1,误差变化Ec的论域为-0.1 0.1内可以任意取值。a=readfis( fuzzf )a = name: fuzzf type: mamdani andMethod: min orMethod: max defuzzMethod: centroid impMethod: min aggMethod: max input: 1x2 struct output: 1x1 struct rule: 1x5 structa=readfis( fuzzf );evalfis(-0.5,-0.07;-0.5,0;-0.5,0.07; 0, -0.07;0,0;0,0.07;0
4、.5,-0.07;0.5,0;0.5,0.07,a)ans = -0.2000 -0.4444 -0.4667 0.1363 -0.0014 -0.2271 0.4000 0.44120.1333实验三利用MATLAB软件的M文件编辑器(也可选择C语言)完成模糊控制查询表的计算。注意:全部工作都由程序实现,不利用FIS文件,不使用Fuzzy工具箱,包括模糊关系矩阵的求取及模糊推理、模糊判决。表1 偏差E的赋值表 eE-6-5-4-3-2-10123456NB10.80.70.40.40.10000000NM0.20.710.70.300000000NS00.10.30.710.70.20000
5、00NO00000.10.61000000PO00000010.60.10000PS0000000.20.710.70.30.10PM000000000.20.710.70.3PB000000000.10.40.70.81表2 偏差变化率Ec的赋值表ecEc-6-5-4-3-2-10123456NB10.70.30000000000NM0.30.710.70.300000000NS000.30.710.70.3000000O00000.30.710.70.30000PS0000000.30.710.70.300PM000000000.30.710.70.3PB00000000000.30.71
6、表3 推理语言规则表EcENBNMNSOPSPMPBNBPBPBPBPBPMOONMPBPBPBPBPMOONSPMPMPMPMONSNSNOPMPMPSONSNMNMPOPMPMPSONSNMNMPSPSPSONMNMNMNMPMOONMNSNSNSNSPBOONMNSNSNSNS表4 控制量U的赋值表U-6-5-4-3-2-10123456NB10.70.30000000000NM0.30.710.70.300000000NS000.30.710.70.3000000O00000.30.710.70.30000PS0000000.30.710.70.300PM000000000.30.71
7、0.70.3PB00000000000.30.71程序如下:clc;clear;E = 1,0.8,0.7,0.4,0.1,0,0,0,0,0,0,0,0; 0.2,0.7,1,0.7,0.3,0,0,0,0,0,0,0,0; 0,0.1,0.3,0.7,1,0.7,0.2,0,0,0,0,0,0; 0,0,0,0,0.1,0.6,1,0,0,0,0,0,0; 0,0,0,0,0,0,1,0.6,0.1,0,0,0,0; 0,0,0,0,0,0,0.2,0.7,1,0.7,0.3,0.1,0; 0,0,0,0,0,0,0,0,0.2,0.7,1,0.7,0.3; 0,0,0,0,0,0,0,0
8、,0.1,0.4,0.7,0.8,1%8*13EC =1,0.7,0.3,0,0,0,0,0,0,0,0,0,0; 0.3,0.7,1,0.7,0.3,0,0,0,0,0,0,0,0; 0,0,0.3,0.7,1,0.7,0.3,0,0,0,0,0,0; 0,0,0,0,0.3,0.7,1,0.7,0.3,0,0,0,0; 0,0,0,0,0,0,0.3,0.7,1,0.7,0.3,0,0; 0,0,0,0,0,0,0,0,0.3,0.7,1,0.7,0.3; 0,0,0,0,0,0,0,0,0,0,0.3,0.7,1%7*13U=1,0.7,0.3,0,0,0,0,0,0,0,0,0,0;
9、0.3,0.7,1,0.7,0.3,0,0,0,0,0,0,0,0; 0,0,0.3,0.7,1,0.7,0.3,0,0,0,0,0,0; 0,0,0,0,0.3,0.7,1,0.7,0.3,0,0,0,0; 0,0,0,0,0,0,0.3,0.7,1,0.7,0.3,0,0; 0,0,0,0,0,0,0,0,0.3,0.7,1,0.7,0.3; 0,0,0,0,0,0,0,0,0,0,0.3,0.7,1%7*13rulelist= 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; 2,2,3,4,5,6,6; 3,3,4,
10、6,6,6,6; 4,4,6,7,7,7,7; 4,4,6,7,7,7,7%8*7for iii=1:13 %偏差E的模糊值控制 for jjj=1:13 %偏差率EC的模糊值控制 for ii=1:8 %偏差E的模糊规则控制 for jj=1:7 %偏差变化率EC的模糊规则控制A_rulelist = rulelist(ii,jj); %查模糊规则表 %*计算C1A* A = E(ii,:); %取A C_A = U(A_rulelist,:); %取Ci for i=1:13 %求R1Afor j=1:13if(A(i) C_A(1,j)Ra(i,j) = C_A(1,j);elseRa(
11、i,j) = A(i);endendend AA = zeros(1,13); %取AA=A 如AA=1,0,0,0,0,0,0,0,0,0,0,0,0; %AA(1,iii) = E(ii,iii); AA(1,iii) = 1; for i=1:13 %先取小for j=1:13 if(AA(j) Ra(j,i)A_qux(j,i) = Ra(j,i);elseA_qux(j,i) = AA(j);endendend for i=1:13 %再取大,求和CiAmax = A_qux(1,i);for j=1:13if(max C_B(1,j)Rb(i,j) = C_B(1,j);elseR
12、b(i,j) = B(1,i);endendend BB = zeros(1,13); %取BB=B 如BB=1,0,0,0,0,0,0,0,0,0,0,0,0; %BB(1,jjj) = EC(jj,jjj); BB(1,jjj) = 1; for i=1:13 %先取小for j=1:13 if(BB(j) Rb(j,i)B_qux(j,i) = Rb(j,i);elseB_qux(j,i) = BB(j);endendend for i=1:13 %再取大,求和CiAmax = B_qux(1,i);for j=1:13if(max CiB(i)Ci(i) = CiB(i);elseCi
13、(i) = CiA(i);endend %*计算C1完毕* C(ii-1)*7+jj,:) = Ci; % 将Ci存到数组C中,C是56*13的数组endend %根据式Ui=C=C1并C2并并3for i=1:13max = C(1,i);for j=1:56if(max C(j,i)max = C(j,i);endendUi(i) = max;end %用重心法进行解模糊运算,并映射为实际的控制量sum_fenz = 0;sum_fenm = 0;for i=1:13sum_fenz = sum_fenz + (i-7)*Ui(i);sum_fenm = sum_fenm + Ui(i);endcore = sum_fenz/sum_fenm;U_control(iii,jjj) = core;endendU_control = round(U_control.*10000)/10000; %对控制量保留小数点后两位U_control计算结果:实验四控制系统仿真实验。利用MATLAB的SIMULINK设计一个控制系统,在库中找到所需的各模块,连接各模块,启动仿真,显示输出曲线,观察控制性能,不理想时适当修改有关参数或控制规则,获得满意的控制效果。(对象采用二阶以上)被控对象模型为:simulink结构图如下:得到如下曲线:
限制150内