模糊控制程序实例Word格式文档下载.docx
《模糊控制程序实例Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《模糊控制程序实例Word格式文档下载.docx(20页珍藏版)》请在冰豆网上搜索。
写成模糊推理句:
ifE=NBthenU=PB
ifE=NSthenU=PS
ifE=Z0thenU=Z0
ifE=PSthenU=NS
ifE=PBthenU=NB
由上述的控制规则可得到模糊控制规则表,如表5-4所示。
表5-4模糊控制规则表
E
PS
U
ZO
模糊控制规则实际上是一组多重条件语句,它可以表示从误差论域旦到控制量论域U的模糊关系
R。
按着上述控制规则,可以得到该温度偏差与喷水阀门开度之间的模糊关系R:
REU
(NBePBu)U(NSePSu)U(Z0eZ0u)U(PSeNSu)U(PBeNBu)
计算模糊关系矩阵R的子程序如F_Relation_1.m所示。
%莫糊关系计算子程序F_Relation_1.c
function[R,mfe,mfu,ne,nu,Me]=F_Relation_1
%#############################!
俞入模糊变量赋值表(表5-3)############################
ne=7;
%等级量e的个数
nu=7;
%等级量u的个数
Me=[000000.51;
000010.50;
000.510.500;
00.510000;
10.500000];
Mu=Me;
%##定义模糊变量及其语言值仁PB,2=PS,3=O,4=NS,5=NB,并输入模糊控制规则表(表5-4)##
mfc=5;
%模糊变量E的语言值个数,控制规则表列数
E=[54321];
UC=[12345];
%########################计算R=EXU###############################################
R=zeros(ne,nu);
fori=1:
mfc
iu=UC(i);
ie=E(i);
fork=1:
ne
for1=1:
nu
ifMe(ie,k)<
Mu(iu,l)
Reu(k,l)=Me(ie,k);
else
Reu(k,l)=Mu(iu,l);
end
forl=1:
ifReu(k,l)>
R(k,l)
R(k,l)=Reu(k,l);
运行结果如下:
1.0
R0
由此,可以得到各种输入时,模糊控制器的输出:
E1,由表5-2可以查出
单输入时:
UEoR
例如:
单输入时,设e1.2,根据前面的等级量划分原则,其等级量
EPS[000010.50]。
根据式(5-5)可以得到:
U000010.500
[0.50.51.00.50.500]
其模糊决策子程序如F_Deduce_1.m所示。
%单输入时模糊决策子程序F_Deduce_1.m
functionFU=F_Deduce_1(fe,R,ne,nu)
forj=1:
iffe(j)<
R(j,i)feu(j)=fe(j);
feu(j)=R(j,i);
FU(i)=max(feu);
%单输入模糊控制仿真程序FC_SI_main.m,被控对象W(s)=-1.1/(35s+1)A4)
clearall
DT=1;
ST=1500;
LP=ST/DT;
A1=exp(-DT/35);
B1=1-A1;
x(1:
4)=0;
ur=0;
%###设置e、u的初始论域及其等级量论域,计算量化因子及比例因子##########
em=1.5;
EM=3;
Ke=EM/em;
UM=3;
um=1.5;
Ku=um/UM;
%#########调用计算模糊关系矩阵R的子程序F_Relation_1.m#############
[R,mfc,ne,nu,Me]=F_Relation_1;
%#############################################################fork=1:
LP
%############计算FC的输岀###################################
e=1-x(4);
%计算偏差量e
e仁round(Ke*e);
%把e转化成等级量
ife1>
EM;
e1=EM;
end
ife1<
-EM;
e1=-EM;
j=e1+EM+1;
Fi=1;
fori=2:
mu
图5.11单输入模糊控制器的控制效果
从上述的仿真结果可以看到,定值扰动时系统可以达到稳定,但是有很大的静差,不能满足工程上的要求,究其原因是,模糊控制器实质上是一个具有继电器型非线性特性的控制器(如图5.11中所示的u),没有积分作用,对于有自平衡对象一定会产生静差,而且系统极容易产生震荡。
从图5.11就可看出,虽然设计的模糊控制器对定值扰动是稳定的,但对于内扰并不能使其稳定。
非线性控制器的控制效果取决于各变量的论域及扰动量的大小【"
,因此,模糊控制器的大范围工
程应用还有许多问题需要研究。
2、双输入模糊控制器的设计
【例5.13】对于图5.10所示的系统,设计双输入模糊控制器,观察定值扰动和内部扰动的控制效果。
下面考虑两个输入的情况:
设温度偏差e、偏差变化率ec及控制量u的实际论域:
eecu[1.5,1.5],选择它们的等级
量论域分别为
E{
6,5,4,3,2,
1,0,0,1,2,3,4,5,6}
EC
{
6,
5,4,
3,
2,1,0,1,2,3,4,5,6}
U{
7,
2,1,0,1,2,3,4,5,6,7}
量化因子Keec
26
4
,K
u
2
714
1.5
(
1.5)3
假设选取
E的模糊变量词集为
{NB,NM,NS,NO,PO,PS,PM,PB}
选取模糊变量E的赋值表如表5-5所示。
表5-5e的等级量与模糊量的关系
-6
-5
-4
-3
-2
-1
-0
+0
+1
+2
+3
+4
+5
+6
PB
0.1
0.4
0.8
PM
0.2
0.7
0.3
PO
0.6
NO
NM
NB
选取EC、U的模糊变量词集为
{NB,NM,NS,ZO,PS,PM,PB}
选取模糊变量EC的赋值表如表5-2所示,模糊变量U的赋值表如表5-6所示。
表5-6等级量U与模糊量U的关系
-7
+7
nm
现将操作者在操作过程中遇到的各种出现的情况和相应的控制策略汇总为表5-7。
表5-7双输入时的模糊控制规则表
ns
no
po
pm
下面说明建立模糊控制规则表的基本思想。
首先考虑误差为负的情况,当误差(希望值减去温度值)为负大时(说明温度高于希望值),若误差变化率也为负,这时误差有增大的趋势,为尽快消除已有的负大误差并抑制误差变大,所以控制量的变化取正大(控制量增大,意味着喷水阀门开度增大,喷水量增加,使得温度下降,下同)。
当误差为负而误差变化率为正时,系统本身已有减少误差的趋势,所以,为尽快消除误差而又不超调,应取较小的控制量。
当误差为负中时,控制量的变化应使误差尽快消除,基于这种原则,控制量的变化选取同误差为负大时相同。
当误差为负小时,系统接近稳态,若误差变化微小时,选取控制量变化为正中,以抑制误差往负方向变化;
若误差变化为正时,系统本身有消除负小的误差的趋势,选取控制量变化为正小。
上述选取控制量变化的原则:
当误差大或较大时,选择控制量以尽快消除误差为主;
当误差较小时,选择控制量要注意防止超调,以系统稳定性为主要出发点。
按着上述控制规则,可以得到温度偏差及偏差变化率与喷水阀门开度之间的模糊关系R:
R(EU)o(ECU)EECU
(NBeNBecPBu)U(NMeNBecPBu)U(NSeNBecPMu)ULL
其中角标E,ECU分别表示误差、误差变化率和控制量。
设e、ec、u的等级量分别为nfe、nfec、nfu,贝UR是一个nfenfec行nfu列的矩阵。
计算模糊
关系矩阵R的子程序如F_Relation_2.m所示。
%莫糊关系计算子程序F_Relation_2.c
function[R,n,nE,nEC,nU,nfe,nfec,nfu,Me,Mec]=func()
%#3定义E的模糊变量值仁PB,2=PM,3=PS,4=-O,5=+0,6=NS,7=NM,8=NB并输入表(5-5)####nE=8;
%模糊变量E的语言值个数?
控制表列数
E=[87654321];
nfe=14;
%E的等级量个数
Me=[O0000000000.10.40.81.0;
0000000000.20.71.00.70.2;
00000000.30.81.00.50.100;
00000001.00.60.10000;
00000.10.61.00000000;
000.10.51.00.80.30000000;
0.20.71.00.70.2000000000;
1.00.80.40.10000000000];
%###定义EC的模糊变量值1=PB,2=PM,3=PS,4=0,5=NS,6=NM,7=NB并输入表(5-2)#####
nEC=7;
%模糊变量EC勺语言值个数?
控制表行数
EC=[7654321];
nfec=13;
%EC的等级量个数
Mec=[0000000000.10.40.81.0;
000000000.20.71.00.70.2;
00000000.91.00.70.200;
000000.51.00.500000;
000.20.71.00.90000000;
0.20.71.00.70.200000000;
1.00.80.40.1000000000];
%###定义U的模糊变量值仁PB,2=PM,3=PS,4=0,5=NS,6=NM,7=NB并输入表(5-6)#####
nU=7;
%模糊变量U的语言值个数
U=[7654321];
nfu=15;
%U的等级量个数
Mu=[000000000000.10.40.81.0;
0000000000.20.71.00.70.20;
00000000.41.00.80.40.1000;
0000000.51.00.5000000;
0000.10.40.81.00.40000000;
00.20.71.00.70.2000000000;
1.00.80.40.100000000000];
%#####################耕俞入模糊控制规则表(表5-7)#########################
nfc=8;
%模糊变量E的语言值个数,模糊控制表列数mfc=7;
%模糊变量EC勺语言值个数,模糊控制表行数
UC=[11222344;
11222344;
11233456;
12344567;
22345567;
23456677;
34566777];
%###########################计算R=(EXECXU)#######################################
R=zeros(nfe*nfec,nfu);
nfc
%EXEC
ie=E(j);
iec=EC(i);
nfe
nfec
Mec(iec,l)Reec(k,l)=Me(ie,k);
else
Reec(k,l)=Mec(iec,l);
end
%ExECXU
iu=UC(i,j);
n=0;
n=n+1;
fort=1:
nfu
ifReec(k,l)<
Mu(iu,t)
Reecu(n,t)=Reec(k,l);
Reecu(n,t)=Mu(iu,t);
endend
n
ifReecu(k,l)>
R(k,l)R(k,l)=Reecu(k,l);
然后
双输入时,先根据e、ec计算出相应的等级量E、EC,再根据表(5-2)查出相应的E,EC,
按式(5-6)计算出模糊控制器的输出。
其模糊决策子程序如F_Deduce_2.m所示。
%双输入时模糊决策子程序F_Deduce_2.m
functionFU=F_Deduce_2(fe,fec,R,n,nfe,nfec,nfu)
%######################5计算exEC#####################################
iffe(i)<
fec(j)
feec(n)=fe(i);
feec(n)=fec(j);
%######################5计算(ExEC)。
R################################
iffeec(i)<
R(i,l)
fu(i)=feec(i);
fu(i)=R(i,l);
FU(l)=max(fu);
按着前面的设计过程,可以得到双输入模糊控制主程序,如FC_MI_main.m所示。
%单输入单变量模糊控制仿真程序FC_SI_main.m,被控对象W(s)=-1.1/(35s+1)A4)
e0=0;
%###设置e、ec、u的初始论域及其等级量论域,计算量化因子及比例因子##########
em=2;
EM=6;
ecm=2;
ECM=6;
Kec=ECM/ecm;
UM=7;
um=2;
U=[-7-6-5-4-3-2-101234567];
%#########调用计算模糊关系矩阵R的子程序F_Relation_2.m#################
[R,n,nE,nEC,nU,nfe,nfec,nfu,Me,Mec]=F_Relation_2;
%################################################################fork=1:
%############计算FC输岀#######################################
%#########变量e模糊化处理#############################
%计算输入e的确切量
%把e转换成等级量
0;
if(e1==0)&
(e<
0);
j=7;
(e>
j=8;
j=e1+EM+2;
%得到e的模糊语言值
mfE=Me(1,j);
nE
ifMe(i,j)>
mfE;
Fi=i;
mfE=Me(i,j);
fe=Me(Fi,:
);
%##########变量ec模糊化处理############################
ec=(e-eO)/DT;
e0=e;
计算ec的确切量
ec仁round(Kec*ec);
%把ec转换成等级量
ifec1>
ECM;
ec1=ECM;
ifec1<
-ECM;
e1