MATLAB在模煳系统中应用
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
开启的角度 ,这钟关系 =f(t,p)很难用数学模型精确描
述。在现实情况下,这一过程由有经验的操作人员完成, 因而可设计模糊控制器取而代之。
将输入变量(t,p)和输出变量 模糊化,其隶属度函数采用
常用的梯形和三角形函数。
模糊推理规则有三条:
If 温度“冷” and 压力”高” then 阀门角度增量为“正” If 温度“热” and 压力”高” then 阀门角度增量为“负” If 压力“正常” then 阀门角度增量为“零”
a=addmf(a, ’input’,1,’excellent’,’gaussmf’,[1.5 10]); plotmf(a,’input’,1) %绘制隶属度函数
Addvar:添加变量 Addmf:添加隶属度函数 Addrule:添加模糊规则 Defuzz: 反模糊化的隶属度函数 evalfis:完成模糊推理 evalmf:隶属度函数的计算 Newfis:建立新的模糊推理系统 Rmmf: 从FIS中删除隶属度函数
这样就得到模糊控制器,可以根据过程的温度和压力通过模 糊控制器计算过程控制的输出。T=50,P=2,则: evalfis([5 2],pc1) ans=5
高斯函数取决于两个参数 和 c
f
(x,
,
c)
e
(
xc)
2 2
2
该函数取决于两个高斯函数的联合,第一个函数 由sig1和c1指定,第二个函数由sig2和c2指定, 分别用于指定左边和右边的形状。只要c1<c2,则 该函数的最大值达1,否则其最大值小于1
gaussmf 格式:y=gaussmf(x,[sig c])
当模糊系统有m个输入,n个输出时,规则列 表矩阵有m+n+2列
前m列表示系统的输入,每列的数值表示输 出变量隶属度函数的编号
接着的n列表示系统的输出,每列的数值表示 输出变量隶属度函数的编号;
第m+n+1列的内容为该条规则的权值(01);
第m+n+2列的值决定模糊操作符的类型:1 (and)或2 (or)
%方法1 x=[0:100]';
young=trapmf(x,[0 0 10 30]);
midage=trapmf(x,[10 30 50 70]);
old=trapmf(x,[50 70 100 100]);
veryyoung=trapmf(x,[0 0 5 20]);
veryold=trapmf(x,[65 85 100 100]);
MATLAB在模糊 系统中的应用
隶属度函数
1 dsigmf 功能:由两个S形隶属度函数的差构成的隶属度函数 格式:y=dsigmf(x,[a1 c1 a2 c2]) S形隶属度函数:
f
(
x,
a,
c)
1
1 ea(
xc)
Dsigmf有四个参数:a1,c1,a2,c2 f1(x,a1,c1)-f2(x,a2,c2)
x=(0:0.1:10)’;
y1=gauss2mf(x,[2 4 1 8]);
1
y2=gauss2mf(x,[2 5 1 7]);
y3=gauss2mf(x,[2 6 1 6]);0.8
y4=gauss2mf(x,[2 7 1 5]);
0.6
y5=gauss2mf(x,[2 8 1 4]);
man=[young midage old veryyoung veryold];
subplot(2,1,1);
plot(x,man); xlabel('年龄'); ylabel('隶属度函数'); gtext('方法1');
axis([-inf inf -0.1 1.1]); text(70,0.8, '老年'); text(79.5,0.6, '非常老'); text(14,0.8, '年轻'); text(3,0.6, '很年轻'); text(40,0.9, '中年');
x=0:0.1:10; y=dsigmf(x,[5 2 5 7]); plot(x,y) xlabel(‘dsigmf,p=[5 2 5 7]’)
1 0.8 0.6 0.4 0.2
0 0
2
4
6
ห้องสมุดไป่ตู้
8
10
dsigmf,p=[5 2 5 7]
2 gauss2mf 功能:联合高斯型隶属度函数 格式:y=gauss2mf(x,[sig1 c1 sig2 c2])
plot(x,[y1 y2 y3 y4 y5]); 0.4
text(1.9,0.7,’y1’)
text(3,0.7,’y2’)
0.2
text(4,0.7,’y3’)
0
text(4.6,0.6,’y4’)
0
text(3.7,0.15,’y5’)
y1 y2 y3 y4
y5
2
4
6
8
模糊推理系统(FIS)的结构管理
addmf 功能:隶属度函数添加到FIS a=newfis(‘tipper’); a=addvar(a,’input’,’service’,[0 10]); a=addmf(a, ’input’,1,’poor’,’gaussmf’,[1.5 0]); a=addmf(a, ’input’,1,’good’,’gaussmf’,[1.5 5]);
%方法2
young=gbellmf(x,[20,2,0]);
midage=gbellmf(x,[20,3,40]);
old=gbellmf(x,[30,3,90]);
veryyoung=young.^4;
veryold=old.^4;
man=[young midage old veryyoung veryold];
x=0:0.1:10;
1
0.8
y=trimf(x,[3 6 8]);
0.6
plot(x,y)
0.4
xlabel(‘trimf,P=[3 6 8]’)
0.2 0 0
2
4
6
8
10
trimf,P=[3 6 8]
参见: dsigmf ,evalmf,mf2mf,pimf,psigmf,smf 等等 用help命令可以查看各命令的具体用法
plotmf(tip2,'output',1)
rulelist=[1 1 1 1;2 2 1 1;3 3 1 1];
tip2=addrule(tip2,rulelist);
subplot(2,1,1)
plotmf(tip2,'input',1) xlabel('服务') ylabel('输入隶属度')
10
3 gbellmf
功能:广义钟形隶属度函数
格式: y=gbellmf(x,params)
广义中型函数由三个参数a,b,c确定: f (x, a, b, c)
1
1 x c 2b
其中b通常为正,c用于确定曲线的中心
a
x=0:0.1:10;
y=gbellmf(x,[2 4 6]);
1
plot(x,y)
0
xa a xb bxc cxd
dx
x=0:0.1:10; y=trapmf(x,[1 5 7 8]); plot(x,y) xlabel(‘trapmf,P=[1 5 7 8]’)
1 0.8
0.6 0.4
0.2
0
0
2
4
6
8
10
trapmf,P=[1 5 7 8]
5 trimf 三角形隶属度函数
举例说明隶属度函数的选择要求
设置输入为表征饭店侍者服务好坏的值(0~10),输出为客 人付出的小费(0~30) 若有三条规则: if 服务差 then 小费低 if 服务好 then 小费中等 if 服务很好 then 小费高
据此设计简单的模糊推理系统,然后会是输入输出 曲线
模糊规则列表矩阵
tipper (mamdani)
3 rules
tip (3)
System tipper: 2 inputs, 1 outputs, 3 rules
模糊系统的应用编程
方法1 利用最常用的梯形隶属度函数表示“年轻”, “中年”,“老年”,“很年轻”,“非常老” 等模糊量
方法2 利用广义钟型函数表1(x示) “2(年x) 轻3”(x,) “中年”, “老年”,若它们分别4 (x用) (1(x))4 “很年轻”可表示成5 (x) (3(x))4 “非常老”可表示成
subplot(2,1,2) gensurf(tip2) %产生FIS的输出曲面 xlabel('服务') ylabel('小费')
将上例中的隶属度函数的参数从1.8改为1.0,则变为右图, 这时的输出并不是严格的递增函数,故参数选择不当
模糊控制
Example one 某一工业过程要根据测量的温度(t)和压力(P) 来确定阀门
pc1=newfis('pc1') pc1=addvar(pc1,'input','温度',[0 30]); pc1=addvar(pc1,'input','压力',[0 3]); pc1=addvar(pc1,'output','增量',[-10 10]); 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]); rulelist=[1 2 3 1 1;2 2 1 1 1;0 1 2 1 2]; pc1=addrule(pc1,rulelist);
tip2=newfis('tip2'); tip2=addvar(tip2,'input','服务',[0 10]); tip2=addvar(tip2,'output','小费',[0 25]); tip2=addmf(tip2,'input',1,'差','gaussmf',[1.8 0]); tip2=addmf(tip2,'input',1,'好','gaussmf',[1.8 5]); tip2=addmf(tip2,'input',1,'很好','gaussmf',[1.8 10]); tip2=addmf(tip2,'output',1,'低','trapmf',[0 0 5 12]); tip2=addmf(tip2,'output',1,'中等','trimf',[5 12 19]); tip2=addmf(tip2,'output',1,'高','trapmf',[12 19 25 25]);
0.8
xlabel(‘gbellmf,P=[2 4 6]’) 0.6
0.4
0.2
0
0
2
4
6
8
10
gbellmf,P=[2 4 6]
4 trapmf 功能:梯形隶属度函数 格式:y=trapmf(x,[a,b,c,d])
0
xa
f
(
x,
a,
b,
c,
d
)
ba
1
dx
dc
Degree of membership
1 poor
good
0.8
0.6
0.4
0.2
0
0
2
4
6
service
rmvar: 从FIS中删除变量
excellent
8
10
a=readfis(‘tipper’); %读取模糊推理系统 plotfis(a) %绘图表示FIS的结构
service (3) food (2)
subplot(2,1,2);
plot(x,man); xlabel('年龄'); ylabel('隶属度函数'); gtext('方法2');
axis([-inf inf -0.1 1.1]); text(60,0.8, '老年'); text(70,0.6, '非常老'); text(14,0.8, '年轻'); text(3,0.6, '很年轻'); text(30,0.9, '中年');
述。在现实情况下,这一过程由有经验的操作人员完成, 因而可设计模糊控制器取而代之。
将输入变量(t,p)和输出变量 模糊化,其隶属度函数采用
常用的梯形和三角形函数。
模糊推理规则有三条:
If 温度“冷” and 压力”高” then 阀门角度增量为“正” If 温度“热” and 压力”高” then 阀门角度增量为“负” If 压力“正常” then 阀门角度增量为“零”
a=addmf(a, ’input’,1,’excellent’,’gaussmf’,[1.5 10]); plotmf(a,’input’,1) %绘制隶属度函数
Addvar:添加变量 Addmf:添加隶属度函数 Addrule:添加模糊规则 Defuzz: 反模糊化的隶属度函数 evalfis:完成模糊推理 evalmf:隶属度函数的计算 Newfis:建立新的模糊推理系统 Rmmf: 从FIS中删除隶属度函数
这样就得到模糊控制器,可以根据过程的温度和压力通过模 糊控制器计算过程控制的输出。T=50,P=2,则: evalfis([5 2],pc1) ans=5
高斯函数取决于两个参数 和 c
f
(x,
,
c)
e
(
xc)
2 2
2
该函数取决于两个高斯函数的联合,第一个函数 由sig1和c1指定,第二个函数由sig2和c2指定, 分别用于指定左边和右边的形状。只要c1<c2,则 该函数的最大值达1,否则其最大值小于1
gaussmf 格式:y=gaussmf(x,[sig c])
当模糊系统有m个输入,n个输出时,规则列 表矩阵有m+n+2列
前m列表示系统的输入,每列的数值表示输 出变量隶属度函数的编号
接着的n列表示系统的输出,每列的数值表示 输出变量隶属度函数的编号;
第m+n+1列的内容为该条规则的权值(01);
第m+n+2列的值决定模糊操作符的类型:1 (and)或2 (or)
%方法1 x=[0:100]';
young=trapmf(x,[0 0 10 30]);
midage=trapmf(x,[10 30 50 70]);
old=trapmf(x,[50 70 100 100]);
veryyoung=trapmf(x,[0 0 5 20]);
veryold=trapmf(x,[65 85 100 100]);
MATLAB在模糊 系统中的应用
隶属度函数
1 dsigmf 功能:由两个S形隶属度函数的差构成的隶属度函数 格式:y=dsigmf(x,[a1 c1 a2 c2]) S形隶属度函数:
f
(
x,
a,
c)
1
1 ea(
xc)
Dsigmf有四个参数:a1,c1,a2,c2 f1(x,a1,c1)-f2(x,a2,c2)
x=(0:0.1:10)’;
y1=gauss2mf(x,[2 4 1 8]);
1
y2=gauss2mf(x,[2 5 1 7]);
y3=gauss2mf(x,[2 6 1 6]);0.8
y4=gauss2mf(x,[2 7 1 5]);
0.6
y5=gauss2mf(x,[2 8 1 4]);
man=[young midage old veryyoung veryold];
subplot(2,1,1);
plot(x,man); xlabel('年龄'); ylabel('隶属度函数'); gtext('方法1');
axis([-inf inf -0.1 1.1]); text(70,0.8, '老年'); text(79.5,0.6, '非常老'); text(14,0.8, '年轻'); text(3,0.6, '很年轻'); text(40,0.9, '中年');
x=0:0.1:10; y=dsigmf(x,[5 2 5 7]); plot(x,y) xlabel(‘dsigmf,p=[5 2 5 7]’)
1 0.8 0.6 0.4 0.2
0 0
2
4
6
ห้องสมุดไป่ตู้
8
10
dsigmf,p=[5 2 5 7]
2 gauss2mf 功能:联合高斯型隶属度函数 格式:y=gauss2mf(x,[sig1 c1 sig2 c2])
plot(x,[y1 y2 y3 y4 y5]); 0.4
text(1.9,0.7,’y1’)
text(3,0.7,’y2’)
0.2
text(4,0.7,’y3’)
0
text(4.6,0.6,’y4’)
0
text(3.7,0.15,’y5’)
y1 y2 y3 y4
y5
2
4
6
8
模糊推理系统(FIS)的结构管理
addmf 功能:隶属度函数添加到FIS a=newfis(‘tipper’); a=addvar(a,’input’,’service’,[0 10]); a=addmf(a, ’input’,1,’poor’,’gaussmf’,[1.5 0]); a=addmf(a, ’input’,1,’good’,’gaussmf’,[1.5 5]);
%方法2
young=gbellmf(x,[20,2,0]);
midage=gbellmf(x,[20,3,40]);
old=gbellmf(x,[30,3,90]);
veryyoung=young.^4;
veryold=old.^4;
man=[young midage old veryyoung veryold];
x=0:0.1:10;
1
0.8
y=trimf(x,[3 6 8]);
0.6
plot(x,y)
0.4
xlabel(‘trimf,P=[3 6 8]’)
0.2 0 0
2
4
6
8
10
trimf,P=[3 6 8]
参见: dsigmf ,evalmf,mf2mf,pimf,psigmf,smf 等等 用help命令可以查看各命令的具体用法
plotmf(tip2,'output',1)
rulelist=[1 1 1 1;2 2 1 1;3 3 1 1];
tip2=addrule(tip2,rulelist);
subplot(2,1,1)
plotmf(tip2,'input',1) xlabel('服务') ylabel('输入隶属度')
10
3 gbellmf
功能:广义钟形隶属度函数
格式: y=gbellmf(x,params)
广义中型函数由三个参数a,b,c确定: f (x, a, b, c)
1
1 x c 2b
其中b通常为正,c用于确定曲线的中心
a
x=0:0.1:10;
y=gbellmf(x,[2 4 6]);
1
plot(x,y)
0
xa a xb bxc cxd
dx
x=0:0.1:10; y=trapmf(x,[1 5 7 8]); plot(x,y) xlabel(‘trapmf,P=[1 5 7 8]’)
1 0.8
0.6 0.4
0.2
0
0
2
4
6
8
10
trapmf,P=[1 5 7 8]
5 trimf 三角形隶属度函数
举例说明隶属度函数的选择要求
设置输入为表征饭店侍者服务好坏的值(0~10),输出为客 人付出的小费(0~30) 若有三条规则: if 服务差 then 小费低 if 服务好 then 小费中等 if 服务很好 then 小费高
据此设计简单的模糊推理系统,然后会是输入输出 曲线
模糊规则列表矩阵
tipper (mamdani)
3 rules
tip (3)
System tipper: 2 inputs, 1 outputs, 3 rules
模糊系统的应用编程
方法1 利用最常用的梯形隶属度函数表示“年轻”, “中年”,“老年”,“很年轻”,“非常老” 等模糊量
方法2 利用广义钟型函数表1(x示) “2(年x) 轻3”(x,) “中年”, “老年”,若它们分别4 (x用) (1(x))4 “很年轻”可表示成5 (x) (3(x))4 “非常老”可表示成
subplot(2,1,2) gensurf(tip2) %产生FIS的输出曲面 xlabel('服务') ylabel('小费')
将上例中的隶属度函数的参数从1.8改为1.0,则变为右图, 这时的输出并不是严格的递增函数,故参数选择不当
模糊控制
Example one 某一工业过程要根据测量的温度(t)和压力(P) 来确定阀门
pc1=newfis('pc1') pc1=addvar(pc1,'input','温度',[0 30]); pc1=addvar(pc1,'input','压力',[0 3]); pc1=addvar(pc1,'output','增量',[-10 10]); 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]); rulelist=[1 2 3 1 1;2 2 1 1 1;0 1 2 1 2]; pc1=addrule(pc1,rulelist);
tip2=newfis('tip2'); tip2=addvar(tip2,'input','服务',[0 10]); tip2=addvar(tip2,'output','小费',[0 25]); tip2=addmf(tip2,'input',1,'差','gaussmf',[1.8 0]); tip2=addmf(tip2,'input',1,'好','gaussmf',[1.8 5]); tip2=addmf(tip2,'input',1,'很好','gaussmf',[1.8 10]); tip2=addmf(tip2,'output',1,'低','trapmf',[0 0 5 12]); tip2=addmf(tip2,'output',1,'中等','trimf',[5 12 19]); tip2=addmf(tip2,'output',1,'高','trapmf',[12 19 25 25]);
0.8
xlabel(‘gbellmf,P=[2 4 6]’) 0.6
0.4
0.2
0
0
2
4
6
8
10
gbellmf,P=[2 4 6]
4 trapmf 功能:梯形隶属度函数 格式:y=trapmf(x,[a,b,c,d])
0
xa
f
(
x,
a,
b,
c,
d
)
ba
1
dx
dc
Degree of membership
1 poor
good
0.8
0.6
0.4
0.2
0
0
2
4
6
service
rmvar: 从FIS中删除变量
excellent
8
10
a=readfis(‘tipper’); %读取模糊推理系统 plotfis(a) %绘图表示FIS的结构
service (3) food (2)
subplot(2,1,2);
plot(x,man); xlabel('年龄'); ylabel('隶属度函数'); gtext('方法2');
axis([-inf inf -0.1 1.1]); text(60,0.8, '老年'); text(70,0.6, '非常老'); text(14,0.8, '年轻'); text(3,0.6, '很年轻'); text(30,0.9, '中年');