模糊控制实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

中南大学

模糊控制课程实验报告

学生姓名:彭雄威_____________ 指导教师: ________________ m _______ 学院:信息科学与工程学院

学号:114611167 ______________

实验一:

本系统设计基于MATLAB图形模糊推理系统,设计步骤如下:打开MATLAB,输入指令fuzzy,打开模糊逻辑工具箱的图形用户界面窗口,新建一个Mamdani模糊推理系统。

(1) 增加一个输入变量,将输入变量命名为E、Ec,将输出变量命名U。这样就建立了一个两输入单输出的模糊推理系统。如图1.1所示。

图1.1增加一个输入变量

(2) 设计模糊化模块:设计隶属度函数论域范围

图3.2设计水位误差E模块

3.3设计水位误差EC模块

图3.4设计水位输出U模块

(4)模糊控制器的规则设计

le Editor: fuzzf

(5)通过观察器观察规则情况

在菜单view中的rules和surface选项分别对应得是规则观测器和曲而观测器。123 4567891011121314151617181920212223242526272829”

Input: 20】Plot points: ioi Move: [ left 11 rg ] |down] ( up ]

Opened system tuzzf, 49 rules| 5 Close |

图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文件的模糊控制査询表,其中的数据在水位误差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: [lxl struct]

rule: [1x5 struct]

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)

ans =

-0.2000

-0.4444

-0.4667

0.1363

-0.0014

-0.2271

0.4000

0.4412

0.1333

实验三

利用MATLAB软件的M文件编辑器(也可选择C语言)完成模糊控制查询表的计算。

注意:全部工作都由程序实现,不利用FIS文件,不使用Fuzzy I具箱,包括模糊关系矩阵的求取及模糊推理、模糊判决。

表控制量的赋值表

状6 m l *z %*n r

o l *8%%H oo o z .O T Z o z o o o o o o d o O O O O O O

T 9.O T O O O O O o o o o o o z o z o I Z o m o T o o o o o o o o o o rn .o s O T Z O Z .O o o o o o o o o rH o 寸o z o o J

forjjj=l:13 %偏差率EC的模糊值控制

for ii=l:8 %偏差E的模糊规则控制

forjj=l:7 %偏差变化率EC的模糊规则控制

A_rulelist = rulelist(iijj); % 査模糊规则表

%******计算C1A************* A = E(ii,:); %取友

C_A = U(A_rulelist,:); %取Ci for i=l:13 %求口人

for j=l:13

if(A(i)>C_A(l,j))

Ra(iJ)= C_A(1J); else

Ra(iJ) = A(i);

end

end

end

AA = zeros(l,13); %取AA=A' 如AA=[1,0,0,0,0,0,0,0,0,0,0,0,0]; %AA(l,iii)

= E(iijii);

AA(lJii)=l;

for i=l:13 %先取小

forj=l:13

if(AA(j) > Ra(j,i))

A_qux(j,i) = Ra(jJ);

else

A_qux(jJ) = AA(j);

end

end

end

for i=l:13 %再取大…求和CiA

max = A_qux(l,i);

forj=l:13

if(max

end

end

CiA(i) = max;

end

%********CiA 计算完毕********* %*******计算

GB*************B = EC(jj/); %取日 ???

C_B = U(A_rulelist/); %取Ci ??? for i=l:13 %求口日

forj=l:13

Rb(iJ) = C_B(l,j);

else

Rb(Lj) =

end

end

end

相关文档
最新文档