如何在matlab中将模糊控制系统中的规则转化为数值表

时间:2024-05-20 11:55:23

如何在matlab中将模糊控制系统中的规则转化为数值表
第一步首先要建立一个模糊控制器的规则
主要有两种方式
1 直接list清单的方式构建
2 在rule生成器中填写
本文给出了第一种方式的代码如下

clear all;
close all;
load list %这个地方是装载一个规则表,具体代码最后会附带!
% rulelist=[1 1 1 1;
% 2 2 1 1;
% 3 3 1 1;
% 4 4 1 1;
% 5 5 1 1];
a=newfis(‘fuzzpid’);%创建模糊推理系统结构
a = addvar(a,‘input’,‘e’,0.07580[-1,1]); %Parameter eNH,NM,NL,0,PL,PM,PH
a = addmf(a,‘input’,1,‘NH’,‘trimf’,[-6,-6,-3]);
a = addmf(a,‘input’,1,‘NM’,‘trimf’,[-6,-3,-2]);
a =addmf(a,‘input’,1,‘NL’,‘trimf’,[-3,-1,0]);
a =addmf(a,‘input’,1,‘ZO’,‘trimf’,[-1,0,1]);
a =addmf(a,‘input’,1,‘PL’,‘trimf’,[0,1,3]);
a = addmf(a,‘input’,1,‘PM’,‘trimf’,[2,3,6]);
a = addmf(a,‘input’,1,‘PH’,‘trimf’,[3,6,6]);

a=addvar(a,‘input’,‘ec’,0.610[-1,1]); %Parameter ec
a = addmf(a,‘input’,2,‘NH’,‘trimf’,[-6,-6,-3]);
a = addmf(a,‘input’,2,‘NM’,‘trimf’,[-6,-3,-2]);
a =addmf(a,‘input’,2,‘NL’,‘trimf’,[-3,-1,0]);
a =addmf(a,‘input’,2,‘ZO’,‘trimf’,[-1,0,1]);
a =addmf(a,‘input’,2,‘PL’,‘trimf’,[0,1,3]);
a = addmf(a,‘input’,2,‘PM’,‘trimf’,[2,3,6]);
a = addmf(a,‘input’,2,‘PH’,‘trimf’,[3,6,6]);

a = addvar(a,‘output’,’ kp’,[-3,3]); %Parameter kp
a = addmf(a,‘output’,1,‘NH’,‘trimf’,[-3,-3,-2]);
a = addmf(a,‘output’,1,‘NM’,‘trimf’,[-3,-2,-1]);
a =addmf(a,‘output’,1,‘NL’,‘trimf’,[-2,-1,0]);
a =addmf(a,‘output’,1,‘ZO’,‘trimf’,[-1,0,1]);
a =addmf(a,‘output’,1,‘PL’,‘trimf’,[0,1,2]);
a = addmf(a,‘output’,1,‘PM’,‘trimf’,[1,2,3]);
a = addmf(a,‘output’,1,‘PH’,‘trimf’,[2,3,3]);

a = addvar(a,‘output’,‘ki’,[-3,3]); %Parameter ki
a = addmf(a,‘output’,2,‘NH’,‘trimf’,[-3,-3,-2]);
a = addmf(a,‘output’,2,‘NM’,‘trimf’,[-3,-2,-1]);
a =addmf(a,‘output’,2,‘NL’,‘trimf’,[-2,-1,0]);
a =addmf(a,‘output’,2,‘ZO’,‘trimf’,[-1,0,1]);
a =addmf(a,‘output’,2,‘PL’,‘trimf’,[0,1,2]);
a = addmf(a,‘output’,2,‘PM’,‘trimf’,[1,2,3]);
a = addmf(a,‘output’,2,‘PH’,‘trimf’,[2,3,3]);

a = addvar(a,‘output’,‘kd’,[-3,3]); %Parameter kd
a = addmf(a,‘output’,3,‘NH’,‘trimf’,[-3,-3,-2]);
a = addmf(a,‘output’,3,‘NM’,‘trimf’,[-3,-2,-1]);
a =addmf(a,‘output’,3,‘NL’,‘trimf’,[-2,-1,0]);
a =addmf(a,‘output’,3,‘ZO’,‘trimf’,[-1,0,1]);
a =addmf(a,‘output’,3,‘PL’,‘trimf’,[0,1,2]);
a = addmf(a,‘output’,3,‘PM’,‘trimf’,[1,2,3]);
a = addmf(a,‘output’,3,‘PH’,‘trimf’,[2,3,3]);
rulelist=list;
a=addrule(a,rulelist);
a=setfis(a,‘DefuzzMethod’,‘centroid’);
writefis(a,‘fuzzpid’);

a=readfis(‘fuzzpid’);
figure(1);
plotmf(a,‘input’,1);
figure(2);
plotmf(a,‘input’,2);
figure(3);
plotmf(a,‘output’,1);
figure(4);
plotmf(a,‘output’,2);
figure(5);
plotmf(a,‘output’,3);
figure(6);
plotfis(a);

fuzzy fuzzpid;
showrule(a)
%%附带的7*7的表
7 7 1 7 1 1 1
7 6 1 7 5 1 1
7 5 2 6 7 1 1
7 4 2 6 7 1 1
7 3 3 5 7 1 1
7 2 4 4 6 1 1
7 1 4 4 3 1 1
6 7 1 7 3 1 1
6 6 1 7 5 1 1
6 5 2 6 7 1 1
6 4 3 5 6 1 1
6 3 3 5 6 1 1
6 2 4 4 5 1 1
6 1 5 4 4 1 1
5 7 2 7 4 1 1
5 6 2 6 5 1 1
5 5 2 5 6 1 1
5 4 3 5 6 1 1
5 3 4 4 5 1 1
5 2 5 3 5 1 1
5 1 5 3 4 1 1
4 7 2 6 4 1 1
4 6 2 6 5 1 1
4 5 3 5 5 1 1
4 4 4 4 5 1 1
4 3 5 3 5 1 1
4 2 6 2 5 1 1
4 1 6 2 4 1 1
3 7 3 6 4 1 1
3 6 3 5 4 1 1
3 5 4 4 4 1 1
3 4 5 3 4 1 1
3 3 5 3 4 1 1
3 2 6 2 4 1 1
3 1 7 1 4 1 1
2 7 3 4 1 1 1
2 6 4 4 5 1 1
2 5 5 3 3 1 1
2 4 6 3 3 1 1
2 3 6 2 3 1 1
2 2 6 1 3 1 1
2 1 7 1 1 1 1
1 7 4 4 3 1 1
1 6 4 4 5 1 1
1 5 6 3 7 1 1
1 4 6 2 7 1 1
1 3 6 2 7 1 1
1 2 7 1 6 1 1
1 1 7 1 3 1 1
第二步 建立simulink

如何在matlab中将模糊控制系统中的规则转化为数值表
具体的工具就在常用模块就可以找到,在搜索地方打出fuzzy可以得到模糊模块
如何在matlab中将模糊控制系统中的规则转化为数值表
如何在matlab中将模糊控制系统中的规则转化为数值表
注意!!!需要对使用readfis函数读取一下之前建立的模糊系统
如何在matlab中将模糊控制系统中的规则转化为数值表
第三步 在simulink 中通过 Tools -> System Test -> Launch System Test 进入系统测试界面。
如何在matlab中将模糊控制系统中的规则转化为数值表
进去之后在菜单栏选择 Insert -> Test Element -> Simulink ,选择第二步中建立的模型 fuzzy_model如何在matlab中将模糊控制系统中的规则转化为数值表
选择之间建的simulink模型的路径如何在matlab中将模糊控制系统中的规则转化为数值表

之后首先点test vector,选择new新建二个,命名input1和input2,
设置两个输入变量,因为我们是遍历选择需要将所有的模糊区间选到
我这里面是-6到6每次变化1
如何在matlab中将模糊控制系统中的规则转化为数值表
随后进入测试变量,选择new新建一个outlet
如何在matlab中将模糊控制系统中的规则转化为数值表
对properties画圈的地方设置输入变量和输出变量,最后点运行,等待一到两分钟就行了。
如何在matlab中将模糊控制系统中的规则转化为数值表

最后一步是调取参数表的数据
在command 界面输入:
data_biao=stresults.ResultsDataSet.output;
temp=zeros(169,1);
for i=1:169
temp(i)=data_biao{i}(6);
end
table_data=reshape(temp,13,13);
这样就可以得到你想要的参数表了
我的例子的参数表如下
如何在matlab中将模糊控制系统中的规则转化为数值表