模糊控制程序实例.docx
- 文档编号:29442951
- 上传时间:2023-07-23
- 格式:DOCX
- 页数:23
- 大小:119.82KB
模糊控制程序实例.docx
《模糊控制程序实例.docx》由会员分享,可在线阅读,更多相关《模糊控制程序实例.docx(23页珍藏版)》请在冰豆网上搜索。
模糊控制程序实例
5.2.2.6模糊控制器设计实例
1、单输入模糊控制器的设计
【例5.12】已知某汽温控制系统结构如图5.10所示,采用喷水减温进行控制。
设计单输入模糊控制器,观察定值扰动和内部扰动的控制效果。
图5.10单回路模糊控制系统
按表5-2确定模糊变量E、U的隶属函数,按表5-3确定模糊控制规则,选择温度偏差e、控制量u的实际论域:
,则可得到该系统的单输入模糊控制的仿真程序如FC_SI_main.m所示,仿真结果如图5.11所示。
设温度偏差e、控制量u的实际论域:
,选择e、u的等级量论域为
量化因子
。
选择模糊词集为{NB,NS,ZO,PS,PB},根据人的控制经验,确定等级量E,U的隶属函数曲线如图5-8所示。
根据隶属函数曲线可以得到模糊变量E、U的赋值表如表5-3所示。
图5-8E,U的隶属函数曲线
表5-3模糊变量E、U的赋值表(μ)
等级量
μ
E、U
-3
-2
-1
0
1
2
3
PB
0
0
0
0
0
0.5
1
PS
0
0
0
0
1
0.5
0
ZO
0
0
0.5
1
0.5
0
0
NS
0
0.5
1
0
0
0
0
NB
1
0.5
0
0
0
0
0
依据人手动控制的一般经验,可以总结出一些控制规则,例如:
若误差E为O,说明温度接近希望值,喷水阀保持不动;
若误差E为正,说明温度低于希望值,应该减少喷水;
若误差E为负,说明温度高于希望值,应该增加喷水。
若采用数学符号描述,可总结如下模糊控制规则:
若E负大,则U正大;
若E负小,则U正小;
若E为零,则U为零;
若E正小,则U负小;
若E正大,则U负大。
写成模糊推理句:
ifE=NBthenU=PB
ifE=NSthenU=PS
ifE=ZOthenU=ZO
ifE=PSthenU=NS
ifE=PBthenU=NB
由上述的控制规则可得到模糊控制规则表,如表5-4所示。
表5-4模糊控制规则表
E
NB
NS
ZO
PS
PB
U
PB
PS
ZO
NS
NB
模糊控制规则实际上是一组多重条件语句,它可以表示从误差论域E到控制量论域U的模糊关系R。
按着上述控制规则,可以得到该温度偏差与喷水阀门开度之间的模糊关系
:
计算模糊关系矩阵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;
%##定义模糊变量及其语言值1=PB,2=PS,3=O,4=NS,5=NB,并输入模糊控制规则表(表5-4)##
mfc=5;%模糊变量E的语言值个数,控制规则表列数
E=[54321];
UC=[12345];
%########################计算R=E×U###############################################
R=zeros(ne,nu);
fori=1:
mfc
iu=UC(i);
ie=E(i);
fork=1:
ne
forl=1:
nu
ifMe(ie,k) Reu(k,l)=Me(ie,k); else Reu(k,l)=Mu(iu,l); end end end fork=1: ne forl=1: nu ifReu(k,l)>R(k,l) R(k,l)=Reu(k,l); end end end end 运行结果如下: 由此,可以得到各种输入时,模糊控制器的输出: 单输入时: (5-5) 双输入时: (5-6) 三输入时: (5-7) 例如: 单输入时,设 ,根据前面的等级量划分原则,其等级量 ,由表5-2可以查出 。 根据式(5-5)可以得到: 其模糊决策子程序如F_Deduce_1.m所示。 %单输入时模糊决策子程序F_Deduce_1.m functionFU=F_Deduce_1(fe,R,ne,nu) fori=1: nu forj=1: ne iffe(j) feu(j)=fe(j); else feu(j)=R(j,i); end end FU(i)=max(feu); end %单输入模糊控制仿真程序FC_SI_main.m,被控对象W(s)=-1.1/(35s+1)^4) 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 e1=round(Ke*e);%把e转化成等级量 ife1>EM;e1=EM;end ife1<-EM;e1=-EM;end j=e1+EM+1; Fi=1; fori=2: mu ifMe(i,j)>Me(i-1,j);Fi=i;end;%得到模糊语言值 end U=F_Deduce_1(Me(Fi,: ),R,ne,nu);%调用模糊决策子程序 %加权平均法判决控制器的输出 Su=0;S=0; fori=-UM: UM Su=Su+i*U(i+UM+1);S=S+U(i+UM+1); end u=Ku*Su/S+ur; %***************仿真计算被控对象******************** x (1)=A1*x (1)-1.1*B1*u; x (2)=A1*x (2)+B1*x (1); x(3)=A1*x(3)+B1*x (2); x(4)=A1*x(4)+B1*x(3); y1(k)=x(4); u1(k)=u; t(k)=k*DT; ift(k)>800;ur=0.5;end;%800秒后加入内扰 end plot(t,y1) holdon; plot(t,u1,'--') 图5.11单输入模糊控制器的控制效果 从上述的仿真结果可以看到,定值扰动时系统可以达到稳定,但是有很大的静差,不能满足工程上的要求,究其原因是,模糊控制器实质上是一个具有继电器型非线性特性的控制器(如图5.11中所示的u),没有积分作用,对于有自平衡对象一定会产生静差,而且系统极容易产生震荡。 从图5.11就可看出,虽然设计的模糊控制器对定值扰动是稳定的,但对于内扰并不能使其稳定。 非线性控制器的控制效果取决于各变量的论域及扰动量的大小【1】,因此,模糊控制器的大范围工程应用还有许多问题需要研究。 2、双输入模糊控制器的设计 【例5.13】对于图5.10所示的系统,设计双输入模糊控制器,观察定值扰动和内部扰动的控制效果。 下面考虑两个输入的情况: 设温度偏差e、偏差变化率ec及控制量u的实际论域: ,选择它们的等级量论域分别为 量化因子 , 假设选取E的模糊变量词集为 选取模糊变量E的赋值表如表5-5所示。 表5-5e的等级量与模糊量的关系 E E -6 -5 -4 -3 -2 -1 -0 +0 +1 +2 +3 +4 +5 +6 PB 0 0 0 0 0 0 0 0 0 0 0.1 0.4 0.8 1.0 PM 0 0 0 0 0 0 0 0 0 0.2 0.7 1.0 0.7 0.2 PS 0 0 0 0 0 0 0 0.3 0.8 1.0 0.5 0.1 0 0 PO 0 0 0 0 0 0 0 1.0 0.6 0.1 0 0 0 0 NO 0 0 0 0 0.1 0.6 1.0 0 0 0 0 0 0 0 NS 0 0 0.1 0.5 1.0 0.8 0.3 0 0 0 0 0 0 0 NM 0.2 0.7 1.0 0.7 0.2 0 0 0 0 0 0 0 0 0 NB 1.0 0.8 0.4 0.1 0 0 0 0 0 0 0 0 0 0 选取EC、U的模糊变量词集为 选取模糊变量EC的赋值表如表5-2所示,模糊变量U的赋值表如表5-6所示。 表5-6等级量U与模糊量U的关系 U U -7 -6 -5 -4 -3 -2 -1 0 +1 +2 +3 +4 +5 +6 +7 PB 0 0 0 0 0 0 0 0 0 0 0 0.1 0.4 0.8 1.0 PM 0 0 0 0 0 0 0 0 0 0.2 0.7 1.0 0.7 0.2 0 PS 0 0 0 0 0 0 0 0.4 1.0 0.8 0.4 0.1 0 0 0 ZO 0 0 0 0 0 0 0.5 1.0 0.5 0 0 0 0 0 0 NS 0 0 0 0.1 0.4 0.8 1.0 0.4 0 0 0 0 0 0 0 NM 0 0.2 0.7 1.0 0.7 0.2 0 0 0 0 0 0 0 0 0 NB 1.0 0.8 0.4 0.1 0 0 0 0 0 0 0 0 0 0 0 现将操作者在操作过程中遇到的各种出现的情况和相应的控制策略汇总为表5-7。 表5-7双输入时的模糊控制规则表 E U EC NB NM NS NO PO PS PM PB NB PB PB PM PM PM PS ZO ZO NM PB PB PM PM PM PS ZO ZO NS PB PB PM PS PS ZO NS NM ZO PB PM PS ZO ZO NS NM NB PS PM PM PS ZO NS NS NM NB PM PM PS ZO NS NM NM NB NB PB PS ZO NS NM NM NB NB NB 下面说明建立模糊控制规则表的基本思想。 首先考虑误差为负的情况,当误差(希望值减去温度值)为负大时(说明温度高于希望值),若误差变化率也为负,这时误差有增大的趋势,为尽快消除已有的负大误差并抑制误差变大,所以控制量的变化取正大(控制量增大,意味着喷水阀门开度增大,喷水量增加,使得温度下降,下同)。 当误差为负而误差变化率为正时,系统本身已有减少误差的趋势,所以,为尽快消除误差而又不超调,应取较小的控制量。 当误差为负中时,控制量的变化应使误差尽快消除,基于这种原则,控制量的变化选取同误差为负大时相同。 当误差为负小时,系统接近稳态,若误差变化微小时,选取控制量变化为正中,以抑制误差往负方向变化;若误差变化为正时,系统本身有消除负小的误差的趋势,选取控制量变化为正小。 上述选取控制量变化的原则: 当误差大或较大时,选择控制量以尽快消除误差为主;当误差较小时,选择控制量要注意防止超调,以系统稳定性为主要出发点。 按着上述控制规则,可以得到温度偏差及偏差变化率与喷水阀门开度之间的模糊关系 : 其中角标E,EC,U分别表示误差、误差变化率和控制量。 设e、ec、u的等级量分别为nfe、nfec、nfu,则R是一个 行 列的矩阵。 计算模糊关系矩阵R的子程序如F_Relation_2.m所示。 %模糊关系计算子程序F_Relation_2.c function[R,n,nE,nEC,nU,nfe,nfec,nfu,Me,Mec]=func() %##定义E的模糊变量值1=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=[00000000000.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的模糊变量值1=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=(E×EC×U)####################################### R=zeros(nfe*nfec,nfu); fori=1: mfc forj=1: nfc %E×EC ie=E(j); iec=EC(i); fork=1: nfe forl=1: nfec ifMe(ie,k) Reec(k,l)=Me(ie,k); else Reec(k,l)=Mec(iec,l); end end end %E×EC×U iu=UC(i,j); n=0; fork=1: nfe forl=1: nfec n=n+1; fort=1: nfu ifReec(k,l) Reecu(n,t)=Reec(k,l); else Reecu(n,t)=Mu(iu,t); end end end end fork=1: n forl=1: nfu ifReecu(k,l)>R(k,l) R(k,l)=Reecu(k,l); end end end end end 双输入时,先根据e、ec计算出相应的等级量E、EC,再根据表(5-2)查出相应的 ,然后按式(5-6)计算出模糊控制器的输出。 其模糊决策子程序如F_Deduce_2.m所示。 %双输入时模糊决策子程序F_Deduce_2.m functionFU=F_Deduce_2(fe,fec,R,n,nfe,nfec,nfu) %#######################计算E×EC##################################### n=0; fori=1: nfe forj=1: nfec n=n+1; iffe(i) feec(n)=fe(i); else feec(n)=fec(j); end end end %#######################计算(E×EC)。 R################################ forl=1: nfu fori=1: n iffeec(i) fu(i)=feec(i); else fu(i)=R(i,l); end FU(l)=max(fu); end end 按着前面的设计过程,可以得到双输入模糊控制主程序,如FC_MI_main.m所示。 %单输入单变量模糊控制仿真程序FC_SI_main.m,被控对象W(s)=-1.1/(35s+1)^4) clearall DT=1;ST=1500;LP=ST/DT; A1=exp(-DT/35);B1=1-A1; x(1: 4)=0;ur=0;e0=0; %###设置e、ec、u的初始论域及其等级量论域,计算量化因子及比例因子########## em=2;EM=6;Ke=EM/em; ecm=2;ECM=6;Kec=ECM/ecm; UM=7;um=2;Ku=um/UM; 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: LP %############计算FC输出####################################### %#########变量e模糊化处理############################# e=1-x(4);%计算输入e的确切量 e1=round(Ke*e);%把e转换成等级量 ife1>EM;e1=EM;end ife1<-EM;e1=-EM;end ife1<0;j=e1+EM+1;end if(e1==0)&(e<0);j=7;end if(e1==0)&(e>0);j=8;end ife1>0;j=e1+EM+2;end %得到e的模糊语言值 Fi=1;mfE=Me(1,j); fori=2: nE ifMe(i,j)>mfE;Fi=i;mfE=Me(i,j);end end fe=Me(Fi,: ); %##########变量ec模糊化处理############################ ec=(e-e0)/DT;e0=e;计算ec的确切量 ec1=round(Kec*ec);%把ec转换成等级量 ifec1>ECM;ec1=ECM;end ifec1<-ECM;e1=-ECM;end j=ec1+ECM+1; Fi=1; %得到ec的模糊语言值 Fi=1;mfEC=Mec(1,j); fori=2: nEC ifMec(i,j)>mfEC;Fi=i;mfEC=Mec(i,j);end end fec=Mec(Fi,: ); %################调用模糊决策子程序,求出控制量########## FU=F_Deduce_2(fe,fec,R,n,nfe,nfec,nfu); %最大隶属度法判决控制器的输出 nU=1;mFU=FU (1); fori=2: nfu ifFU(i)>mFU;nU=i;mFU=FU(i);end end u=Ku*U(nU)+ur; %***************仿真计算被控对象******************** x (1)=A1*x (1)-1.1*B1*u; x (2)=A1*x (2)+B1*x (1); x(3)=A1*x(3)+B1*x (2); x(4)=A1*
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 模糊 控制程序 实例