系统的模糊控制MATLAB实现.docx

上传人:b****2 文档编号:24324620 上传时间:2023-05-26 格式:DOCX 页数:11 大小:131.34KB
下载 相关 举报
系统的模糊控制MATLAB实现.docx_第1页
第1页 / 共11页
系统的模糊控制MATLAB实现.docx_第2页
第2页 / 共11页
系统的模糊控制MATLAB实现.docx_第3页
第3页 / 共11页
系统的模糊控制MATLAB实现.docx_第4页
第4页 / 共11页
系统的模糊控制MATLAB实现.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

系统的模糊控制MATLAB实现.docx

《系统的模糊控制MATLAB实现.docx》由会员分享,可在线阅读,更多相关《系统的模糊控制MATLAB实现.docx(11页珍藏版)》请在冰豆网上搜索。

系统的模糊控制MATLAB实现.docx

系统的模糊控制MATLAB实现

 

智能控制大作业

 

第一次大作业

 

姓名:

周庆强

学号:

1140810106

 

哈尔滨工业大学

2017年5月25日

题目:

对一个系统

,假设给系统一个阶跃值r=30,采样时间为1s,系统的初始值为r(0)=0,利用常规的模糊控制器对系统进行控制。

思路:

在仿真系统中,不需要考虑信号的A/D和D/A转换,模糊控制系统框图如下:

1、选择观测量和控制量

将偏差e,即当前位置-目标目标,作为观察量(输入量)1,%将偏差的变化量ec,即e(t)-e(t-1),作为观察量(输入量)2,选取阀门开度u为控制量。

2、输入量和输出量的模糊化

将偏差e划分为5个模糊集,负大(NB)、负小(NS)、零(ZO)、正小(PS)、正大(PB),e为负表示当前水位低于目标水位,e为正表示当前水位高于目标水位。

设定e的取值范围为[-3,3],隶属度函数如下。

同理,将偏差的变化量ec划分为5个模糊集,负大(NB)、负小(NS)、零(ZO)、正小(PS)、正大(PB),ec为负表示该时刻水位比上一时刻水位小,ec为郑表示该时刻水位比上一时刻水位大,。

设定ec的取值范围为[-3,3],隶属度函数如下。

同样将控制量u划分为5个模糊集,负大(NB)、负小(NS)、零(ZO)、正小(PS)、正大(PB),u为负表示减小控制量,u为正表示增大控制量。

设定u的取值范围为[-4,4],隶属度函数如下。

3、制定模糊规则

模糊规则的制定是模糊控制的核心内容,控制性能的好坏很大程度上由模糊规则决定,本文主要是根据经验来制定相应的规则。

将上述用语言描述的规则转化为“IFA,THENB”的语句如下:

1.If(eisNB)and(ecisNB)then(uisPB)。

2.If(eisNB)and(ecisNS)then(uisPB)。

3.If(eisNB)and(ecisZO)then(uisPB)。

4.If(eisNB)and(ecisPS)then(uisPB)。

5.If(eisNB)and(ecisPB)then(uisPB)。

6.If(eisNS)and(ecisNB)then(uisPB)。

7.If(eisNS)and(ecisNS)then(uisPB)。

8.If(eisNS)and(ecisZO)then(uisPS)。

9.If(eisNS)and(ecisPS)then(uisPS)。

10.If(eisNS)and(ecisPB)then(uisZO)。

11.If(eisZO)and(ecisNB)then(uisPB)。

12.If(eisZO)and(ecisNS)then(uisPS)。

13.If(eisZO)and(ecisZO)then(uisZO)。

14.If(eisZO)and(ecisPS)then(uisNS)。

15.If(eisZO)and(ecisPB)then(uisNB)。

16.If(eisPS)and(ecisNB)then(uisZO)。

17.If(eisPS)and(ecisNS)then(uisPS)。

18.If(eisPS)and(ecisZO)then(uisNS)。

19.If(eisPS)and(ecisPS)then(uisNB)。

20.If(eisPS)and(ecisPB)then(uisNB)。

21.If(eisPB)and(ecisNB)then(uisNB)。

22.If(eisPB)and(ecisNS)then(uisNB)。

23.If(eisPB)and(ecisZO)then(uisNB)。

24.If(eisPB)and(ecisPS)then(uisNB)。

25.If(eisPB)and(ecisPB)then(uisNB)。

4、进行模糊决策

我们最终需要获得的控制量u即为模糊控制的输出,u可由两个输入量(偏差矩阵e和偏差矩阵ec)和模糊关系矩阵R合成得到。

 

根据制定的模糊规则,通过相应的模糊集合运算,可得到模糊关系集合R。

R定义为:

即:

输出模糊量:

5、控制量的反模糊化

我们模糊决策得到的控制量u是一个矩阵,并不能直接应用在工程上,因此需要将u解释为实际中的特定行为,即反模糊化操作。

目前常用的反模糊化方法有以下几种:

(1)最大隶属度法----计算简单控制要求不高场合

(2)重心法----输出更平滑

(3)加权平均法----工业上应用最广泛

本设计中采用第三种方法:

加权平均法。

6、matlab实现

系统结构如图:

通过matlab集成的模糊控制模块,我们能够更加方便地对应偏差e、偏差量ec和控制量u的关系,并可以调节e和ec在不同值下u的对应输出。

7、系统响应与分析

在系统中,发现随着时间的推移,系统快速到达距离标准位置很近的25左右,继而出现波动情况。

分析出现这种现象的原因是模糊控制的调整太大,需要进行自适应调整,以便系统在到达e接近与0的情况下,仍能继续接近标准位置。

老师,最近有些事,没时间做自适应调整了,对不起啊。

8、代码

clear;clc;

%对接收阶跃信号的系统进行模糊控制

%%构建模糊控制器

a=newfis('fuzzytank');

%输入量e的模糊化

a=addvar(a,'input','e',[-3,3]);%将偏差e,即当前位置-目标目标,作为观察量(输入量)

a=addmf(a,'input',1,'NB','zmf',[-3,-1]);

a=addmf(a,'input',1,'NS','trimf',[-3,-1,1]);

a=addmf(a,'input',1,'ZO','trimf',[-2,0,2]);

a=addmf(a,'input',1,'PS','trimf',[-1,1,3]);

a=addmf(a,'input',1,'PB','smf',[1,3]);

%输入量ec的模糊化

a=addvar(a,'input','ec',[-3,3]);%将偏差的变化量ec,即e(t)-e(t-1),作为观察量(输入量)

a=addmf(a,'input',2,'NB','zmf',[-3,-1]);

a=addmf(a,'input',2,'NS','trimf',[-3,-1,1]);

a=addmf(a,'input',2,'ZO','trimf',[-2,0,2]);

a=addmf(a,'input',2,'PS','trimf',[-1,1,3]);

a=addmf(a,'input',2,'PB','smf',[1,3]);

%输出量的模糊化

a=addvar(a,'output','u',[-4,4]);%选取阀门开度u为控制量

a=addmf(a,'output',1,'NB','zmf',[-4,-2]);

a=addmf(a,'output',1,'NS','trimf',[-4,-2,0]);

a=addmf(a,'output',1,'ZO','trimf',[-2,0,2]);

a=addmf(a,'output',1,'PS','trimf',[0,2,4]);

a=addmf(a,'output',1,'PB','smf',[2,4]);

%建立模糊规则

rulelist=[11511

12511

13511

14511

15511

21511

22511

23411

24411

25311

31511

32411

33311

34211

35111

41311

42411

43211

44111

45111

51111

52111

53111

54111

55111];

a=addrule(a,rulelist);

%设置反模糊化算法

a1=setfis(a,'DefuzzMethod','mom');

writefis(a1,'tank');

a2=readfis('tank');%可代入计算的

figure

(1);

plotfis(a2);

figure

(2);

plotmf(a,'input',1);

figure(3);

plotmf(a,'input',2);

figure(4);

plotmf(a,'output',1);

%展示e、ec和u的对应关系

showrule(a);

ruleview('tank');

%%实时调控

r_t=0;%初始值r(0)=0;

r_tf=0;

Ulist=0;

r_aim=30;%目标值

n=50;%进行100次校核

record=zeros(1,n);%记录r的变化

fori=1:

n

r_t=r_tf+Ulist;

e=(r_t-r_aim)*0.1;%获取差值并转化为偏差

ec=(r_t-r_tf)*0.75;%偏差的变化量的k=0.75;

r_tf=r_t;

Ulist=evalfis([eec],a2);%输出

record(i)=r_t;

end

t=0:

1:

n-1;

plot(t,record);%绘制r随时间变化的曲线

xlabel('时间t');

ylabel('r(t)');

title('相应随时间的变化');

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 其它课程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1