系统的模糊控制MATLAB实现.docx
《系统的模糊控制MATLAB实现.docx》由会员分享,可在线阅读,更多相关《系统的模糊控制MATLAB实现.docx(12页珍藏版)》请在冰豆网上搜索。
系统的模糊控制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('相应随时间的变化');