模糊控制应用示例讲解
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
模糊控制器的输入/输出曲面
gensurf(pc1)
例2:典型二阶环节 的模糊
控制
设计模糊控制器,
H
(s)
1.6s 2
20 4.4s
1
使系统输出尽快跟 随系统输入 。
x Ax Bu
y Cx Du
这种以传递函 数形式表示的 系统可以等效 表示成状态方 程形式
其中
a = -2.7500 -0.6250
0
0
0.5
1
1.5
2
2.5 压力 3
阀门开启角度的模糊隶属度 函数
“负” “零” “正”
1 0.8 0.6 0.4 0.2
0 -10 -8 -6 -4 -2 0 2 4 6 8 10
角度增量
隶属度函数
模糊推理规则库
模糊推理规则有3条:
If 温度“冷” and 压力“高”,则阀门角 度增量为“正”
模糊控制器设计(5-5)
模糊推理规则
If 温度“冷” and 压力“高”,则阀门角 度增量为“正”
If 温度“热” and 压力“高”,则阀门角 度增量为“负”
If 压力“正常”,则阀门角度增量为“零 ”
rulelist=[1 2 3 1 1; 2 2 1 1 1; 0 1 2 1 2];
addvar 功能:在FIS中添加变量。 格式:a = addvar (a,'varType','varName',varBounds)
模糊控制器设计(5-2)
addmf 功能:隶属度函数添加到FIS(模糊推理系统)。 格式:a = addmf(a,'varType',varIndex,'mfName','mfType',mfParams)
k1 f (u(i), x(i))
k2 f u(i) h 2 , x(i) h * k1 / 2 k3 f u(i) h 2 , x(i) h * k2 / 2
k4 f u(i) h, x(i) h * k3
系统输入输出
设系统输入为R,系统输出误差为e,误 差导数为de,则可根据系统输出的误差 和误差导数设计出模糊控制器(FC)。
0.4
0.2
0
-3
-2
NS
ZR
PS
-1
0
1
PB
2
u3
e de NB NS ZR PS PB
模糊推理规则
NB NS ZR PS PB
PB PB PS PS ZR PB PS PS ZR ZR PS PS ZR ZR NS PS ZR ZR NS NS ZR ZR NS NS NB
模糊控制系统设计
% Example 3.8 % 典型二阶系统的模糊控制 % %被控系统建模 num=20; den=[1.6,4.4,1]; [a1,b,c,d]=tf2ss(num,den); x=[0;0];
模糊控制器设计(5-4)
addrule 功能:在FIS中添加规则。 格式: a = addrule (a,ruleList)
m个输入,n个输出:
前m列表示系统的输入,每 列的数值表示输入变量隶属 度函数的编号;接着的n列 表示系统的输出,每列的数 值表示输出变量隶属度函数 的编号;第m + n + 1 列为该 条规则的权值(0~1);第 m + n + 2 列的值决定模糊操 作符的类型:1(当模糊操 作符为AND时)或2(当模 糊操作符为OR时)。
If 温度“热” and 压力“高”,则阀门角 度增量为“负”
If 压力“正常”,则阀门角度增量为“零 ”
模糊控制器设计(5-1)
pc1=newfis('pc1'); pc1=addvar(pc1,'input','温度',[0 30]); pc1=addvar(pc1,'input','压力',[0 3]); pc1=addvar(pc1,'output','增量',[-10 10]);
模糊控制系统设计
%计算系统输出误差及误差导数
e1=e; e=y-R(1,k); de=(e-e1)/T; end
模糊控制系统设计
% 典型二阶环节的模糊控制输出曲线 kk=[1:N]*T; figure(1); plot(kk,R,'k',kk,yy,'r'); grid on xlabel('时间(秒)'); ylabel('输出');
模糊控制系统设计
a=addvar(a,'input','de',[-6 6]); a=addmf(a,'input',2,'NB','trapmf' ,[-6,-6,-5,-3]); a=addmf(a,'input',2,'NS','trapmf' ,[-5,-3,-2 0]); a=addmf(a,'input',2,'ZR','trimf' ,[-2,0,2]); a=addmf(a,'input',2,'PS','trapmf' ,[0,2,3,5]); a=addmf(a,'input',2,'PB','trapmf' ,[3,5,6,6]);
模糊控制系统设计
a=addvar(a,'output','u',[-3 3]); a=addmf(a,'output',1,'NB','trapmf',[-3,-3,-3,-2]); a=addmf(a,'output',1,'NS','trimf',[-2,-1,0]); a=addmf(a,'output',1,'ZR','trimf',[-1,0,1]); a=addmf(a,'output',1,'PS','trimf',[0,1,2]); a=addmf(a,'output',1,'PB','trapmf',[2,3,3,3]);
模糊控制系统设计
输出
2
1.8
1.6
1.4
1.2
模糊控制系统设计
%采用模糊控制器的二阶系统仿真 e=0; de=0; ke=30; kd=20; ku=1; for k=1:N %输入变量变换至论域
模糊控制系统设计
e1=ke*e; de1=kd*de; if e1>=6 e1=6; elseif e1<=-6 e1=-6; end
if de1>=6 de1=6; elseif de1<=-6 de1=-6;
误差e的论域:【-6 +6】 误差导数de的论域:【-6 +6】 控制输入u的论域:【-3 +3】
模糊化
1
NB 0.8
NS
PS
ZR
PB
0.6
0.4
0.2
0
-6
-4
-2
0
2
4
e6
1
0.8 NB
NS
PS
ZR
PB
0.6
0.4
0.2
0
-6
-4
-2
0
2
4 de 6
模糊化
1 0.8 NB
0.6
模糊推理计算
例如,当t=5°,P=2,则 evalfis([5 2],pc1) ans =
5 这说明模糊控制器的输出为5°
输入输出控制曲线
绘制wenku.baidu.com当t(或 者P)不变时的
控制曲线,例 如当t=5°时
,可求出控制
输出θ 与压力P 之间的关系,
如图(a)所示 。
t=5; P=[0.1:0.1:3]'; X=[t*ones(size(P)),P]; Y=evalfis(X,pc1); figure(1) subplot 211 plot(P,Y),xlabel('压力');ylabel('控制')
隶属度函数
1
0.8
0.6
0.4
0.2
0
0
5
10
15
20
25 温度 30
1
0.8
0.6
0.4
0.2
0
0
0.5
1
1.5
2
2.5 压力 3
三角形:3个参数 梯形:4个参数
隶属度函数
模糊控制器设计(5-3)
pc1=addmf(pc1,'input',1,'冷','trapmf',[0 0 10 20]); pc1=addmf(pc1,'input',1,'热','trapmf',[10 20 30 30]); pc1=addmf(pc1,'input',2,'正常','trimf',[0 1 2]); pc1=addmf(pc1,'input',2,'高','trapmf',[1 2 3 3]); pc1=addmf(pc1,'output',1,'负','trimf',[-10 -5 0]); pc1=addmf(pc1,'output',1,'零','trimf',[-5 0 5]); pc1=addmf(pc1,'output',1,'正','trimf',[0 5 10]);
模糊控制系统设计
%模糊规则矩阵。 rr =[5 5 4 4 3
54433 44332 43322 3 3 2 2 1]; r1=zeros(prod(size(rr)),3); k=1;
for i=1:size(rr,1) for j=1:size(rr,2) r1(k,:)=[i,j,rr(i,j)]; k=k+1; end end [r,s]=size(r1); r2=ones(r,2); rulelist=[r1,r2]; a=addrule(a,rulelist);
模糊控制系统设计
%系统参数 T =0.01; h=T; N=250; R =1.5*ones(1,N); %参考输入
模糊控制系统设计
%定义输入和输出变量及其隶属度函数 a=newfis('Simple'); a=addvar(a,'input','e',[-6 6]); a=addmf(a,'input',1,'NB','trapmf',[-6,-6,-5,-3]); a=addmf(a,'input',1,'NS','trapmf' ,[-5,-3,-2 0]); a=addmf(a,'input',1,'ZR','trimf' ,[-2,0,2]); a=addmf(a,'input',1,'PS','trapmf' ,[0,2,3 5]); a=addmf(a,'input',1,'PB','trapmf',[3,5,6,6]);
end
模糊控制系统设计
%模糊推理,计算出被控对象的控制输入 in=[e1 de1]; u=ku*evalfis(in,a); uu(1,k)=u;
模糊控制系统设计
%控制作用于被控系统,计算系统输出 k0=a1*x+b*u; k1=a1*(x+h*k0/2)+b*u; k2=a1*(x+h*k1/2)+b*u; k3=a1*(x+h*k2)+b*u; x=x+(k0+2*k1+2*k2+k3)*h/6; y=c*x+d*u; yy(1,k)=y;
控制
6
4
2
0
-2 0
0.5
1
1.5
2
2.5 压力 3
5
控制
0
-5
0
5
10
15
20
25 温度 30
输入输出控制曲线
t1=[0:30]'; P1=2; X1=[t1, P1*ones(size(t1))]; Y1=evalfis(X1,pc1); subplot 212 plot(t1,Y1),xlabel('温度');ylabel('控制')
b =1
1.0000
0
0
c = [ 0 12.5000]
d= 0
龙格-库塔(Runge-Kutta)方法
四阶龙格-库塔公式,也就是在工程中应用广 泛的经典龙格-库塔算法:
x(t) f (u, x) Ax Bu
x(i 1) x(i) h * k1 2 k2 2 k3 k4 / 6
温度:[ 0 ~ 30] 度 压力:[ 0 ~ 3 ] 大气压
阀门开启的角度 : [-10 +10]度
温度和压力的模糊隶属度函数
采用三角形隶属度函数
隶属度函数
1
温度:
0.8
0.6
“冷”“热” 0.4 0.2
0
0
5
10
15
20
25 温度 30
压力:
1 0.8
隶属度函数
0.6
“正常”“高” 0.4 0.2
pc1=addrule(pc1,rulelist);
模糊推理计算
evalfis
功能:完成模糊推理计算。 格式:output= evalfis (input, fismat) output= evalfis (input, fismat, numPts)
numPts:计算输入和输出隶属度函数时采用的取样 点数,如缺省,则采用缺省值:101。
第5次课
例1:工业工程控制
例2:典型二阶环节 的模糊控 制
例1: 工业过程
例1: 某一工业过程要根据测量的温度 (t)和压力(p)来确定阀门开启的角
度: f (t, P) 这种关系很难用数
学模型精确描述。实际中由有经验的操 作员完成,因此通常可设计模糊控制器 取而代之。
输入输出变量的论域