函数 genfis1
格式
fismat=genfis1(data)
fismat=genfis1(data,numMFs,inmftype,outmftype)
说明genfis1为anfis训练生成一个Sugeno型作为初始条件的FIS结构(初始隶属函数)。genfis1(data,numMFs,inmftype,outmftype)使用对数据的网格分割方法,从训练数据集生成一个FIS结构。Data是训练数据矩阵,除最后一列表示单一输出数据外,它的其它各列表示输入数据。NumMFs是一个向量,它的坐标指定与每一输入相关的隶属函数的数量。如果你想使用每个输入相关的相同数量的隶属函数,那么只须使numMFs成为一个数就足够了。Inmftype是一个字符串数组,它的每行指定与每个输入相关的隶属函数类型。outmftype是一个字符串数组,它的指定与每个输出相关的隶属函数类型
例6-19
>>data=[rand(10,1)10*rand(10,1)-5rand(10,1)];
>>numMFs=[37];
>>mfType=str2mat('pimf','trimf');
>>fismat=genfis1(data,numMFs,mfType);
>>[x,mf]=plotmf(fismat,'input',1);
>>subplot(2,1,1),plot(x,mf);
>>xlabel('input1(pimf)');
>>[x,mf]=plotmf(fismat,'input',2);
>>subplot(2,1,2),plot(x,mf);
>>xlabel('input2(trimf)');
函数genfis2
格式
fismat=genfis2(Xin,Xout,radii)
fismat=genfis2(Xin,Xout,radii,xBounds)
fismat=genfis2(Xin,Xout,radii,xBounds,options)
说明Xin是一个矩阵,它的每一行包含一个数据点的输入值;Xout是一个矩阵,它的每一行包含一个数据点的输出值;randi是一个向量,它指定一个聚类中心在一个数据维上作用的范围,这里假定数据位于一个单位超立方体内:xBounds是一个2×N可选矩阵,它用于指定如何将Xin和Xout中的数据映射到一个超立方体内,这里是数据的维数(行数);options是一个可选向量,它指定的值用于覆盖算法参数的缺省值。
例6-20
fismat=genfis2(Xin,Xout,0.5)
这是使用此函数所需的最小变量数。这里对所有数据维指定0.5的作用范围。
fismat=genfis2(Xin,Xout,[0.50.250.3])
这里假定组合的维数是3。假设Xin有两维、Xout有一维,那么,0.5和0.25是Xin数据维中每一维的作用范围,0.3是Xout数据维的作用范围。
fismat=genfis2(Xin,Xout,0.5,[-10-50;10520])
这里指定了如何将Xin和Xout中的数据规范化为[01]区间中的值来进行处理。假设Xin有两维、Xout有一维,那么Xin第一列中的数据是从[-10+10]比例变换后的值,Xin第二列中的数据是从[-5+5]比例变换后的值,Xout中的数据是从[020]比例变换后的值。
函数gensurf
格式
gensurf(fis)%使用前两个输入和第一个输出来生成给定模糊推理系统(fis)的输出曲面
gensurf(fis,inputs,output)%使用分别由向量input和标量output给定的输入(一个或两个)和输出(只允许一个)来生成一个图形。
gensurf(fis,inputs,output,grids)%指定X(第一、水平)和Y(第二、垂直)方向的网格数。如果是二元向量,X和Y方向上的网格可以独立设置。
gensurf(fis,inputs,output,grids,refinput)%用于多于两个的输入,refinput向量的长度与输入相同:
将对应于要显示的输入的refinput项,设置为NaN;
对其它输入的固定值设置为双精度实标量。
[x,y,z]=gensurf(…)%返回定义输出曲面的变量并且删除自动绘图。
例6-21
>>a=readfis('tipper');
>>gensurf(a)
函数mam2sug
格式sug_fis=mam2sug(mam_fis)
说明该函数将一个mamdani型FIS结构(不必是单输出)mam_fis转化为一个sugeno型结构sug_fis。返回的sugeno型系统具有常值输出隶属度函数。这些常值由原来mamdani型系统的后件的隶属度函数的面积中心法来确定。前件仍保持不变。
函数evalfis
格式
output=evalfis(input,fismat)
output=evalfis(input,fismat,numPts)
[output,IRR,ORR,ARR]=evalfis(input,fismat)
[output,IRR,ORR,ARR]=evalfis(input,fismat,numPts)
说明input:指定输入值的一个数或一个矩阵,如果输入是一个M×N矩阵,其中N是输入变量数,那么evalfis使用input的每一行作为一个输入向量,并且为变量output返回M×L矩阵,该矩阵每一行是一个向量并且L是输出变量数;
fismat:要计算的一个FIS结构;
numPts:一个可选变量,它表示在输入或输出范围内的采样点数,在这些点上计算隶属函数,如果不使用此变量,就使用101点的缺省值。
Evalfis的值域如下:
Output:大小为ML的输出矩阵,这里M表示前面指定的输入值的数量,L表示FIS的输出变量数。
evalfis的可选值域变量只有当input是一个行向量时才计算这些可选值域变量是:
IRR:通过隶属函数计算的输入变量的结果,这是一个大小为numRulesN的矩阵,这里numRules是规则条数,N是输入变量数。
ORR:通过隶属函数计算的输出变量的结果,这是一个大小为numPtsnumRulesL的矩阵,这里numRules是规则条数,L是输出变量数,此矩阵的第一组numRules列,对应于第一个输出,第二组numRules对应于第二个输出,依次类推。
ARR:对每个输出,在输出值域中,numPts处采样合成值的numPtsL矩阵,当只有一个值域变量调用时,该函数使用由结构fismat指定的模糊推理系统,由标量或矩阵inout指定的输入值计算输出向量output。
例6-22
>>fismat=readfis('tipper');
>>out=evalfis([21;49],fismat)
结果为
out=
7.0169
19.6810
函数fcm
格式
[center,U,obj_fcn]=fcm(data,cluster_n)
说明对给定的数据集应用模糊c均值聚类方法进行聚类
data:要聚类的数据集,每行是一个采样数据点;
cluster_n:聚类中心的个数(大于1)
center:迭代后得到的聚类中心的矩阵,这里每行给出聚类中心的坐标;
U:得到的所有点对聚类中心的模糊分类矩阵或隶属度函数矩阵;
Obj_fcn:迭代过程中,目标函数的值;
fcm(data,cluster_n,options)使用可选的变量options控制聚类参数。包括停止准则,和/或设置迭代信息显示:
options(1):分类矩阵U的指数,缺省值是2.0;
options(2):最大迭代次数,缺省值是100;
options(3):最小改进量,即迭代停止的误差准则,缺省值是1e-5;
option(4):迭代过程中显示信息,缺省值是1。
如果任意一项为NaN,这些选项就使用缺省值;当达到最大迭代次数时,或目标函数两次连续迭代的改进量小于指定的最小改进量,即满足停止误差准则时,聚类过程结束。
例6-23
>>data=rand(100,2);
>>[center,U,obj_fcn]=fcm(data,2);
>>plot(data(:,1),data(:,2),'o');
>>maxU=max(U);
>>index1=find(U(1,:)==maxU);
>>index2=find(U(2,:)==maxU);
>>line(data(index1,1),data(index1,2),'linestyle','none','marker','*','color','g');
>>line(data(index2,1),data(index2,2),'linestyle','none','marker','*','color','r');
函数findcluster
格式findcluster
findcluster('file.dat')
说明findcluster产生一个GUI上的Method下的下拉式标签,可以实现模糊C均值(fcm)或模糊减法聚类(subtractiv),使用LoadData按钮输入数据,刚进入GUI时,对每种方法的选项都设置为缺省值。
此工具使用多维数据集,但只显示这些维数中的两维。使用X-axis和Y-axis下的下拉式标签选择你想观察的数据维。例如你有一个五维数据集,按照出现在数据集中的顺序,此工具将数据标记为data_1,data_2,data_3,data_4,data_5,Start将完成聚类,SaveCentre将保存聚类中心。
当使用数据集file.data时,findcluster(file.dat)自动装入数据集,并且只绘制数据集中的前两维。产生GUI后,你仍可以选择要聚类数据的那两维。
例6-24
>>findcluster('clusterdemo.dat')
函数plotfis
格式plotfis(fismat)
说明此函数显示由fismat指定的一个FIS的高层方框图,输入和它们的隶属函数出现在结构特征图的左边,同时输出和它们的隶属函数出现在结构特征图的右边。
例6-25
>>a=readfis('tipper');
>>plotfis(a)
函数plotmf
格式plotmf(fismat,varType,varIndex)
说明此函数绘制与给定变量相关的称为fismat的FIS中的所有隶属函数曲线,变量的类型和索引分别由varType('input'或'output')和varIndex给出。此函数也可以与MATLAB函数subplot一起使用。
例6-26
>>a=readfis('tipper');
>>plotmf(a,'input',1)
函数readfis
格式fismat=readfis('filename')
说明从磁盘上的一个.fis文件(由filename命名)读出一个模糊推理系统,并将产生的FIS装入当前的工作空间中。Fismat=readfis不带输入变量,即没有指定文件名时,使用uigetfile命令打开一个对话框,提示用户指定文件的名称和目录位置。
例6-27
>>fismat=readfis('tipper');
>>getfis(fismat)
返回结果
getfis(fismat)
Name=tipper
Type=mamdani
NumInputs=2
InLabels=
service
food
NumOutputs=1
OutLabels=
tip
NumRules=3
AndMethod=min
OrMethod=max
ImpMethod=min
AggMethod=max
DefuzzMethod=centroid
ans=
tipper
函数rmmf
格式fis=rmmf(fis,'varType',varIndex,'mf',mfIndex)
说明从与工作空间FIS结构fis相关的模糊推理系统中删除变量类型为varType,索引为varIndex的隶属函数mfIndex。
字符串vartype必须是'input'或'output'。
varIndex是表示变量索引的一个整数,此索引表示列出变量的顺序;
变量'mf'是表示隶属函数的一个字符串;
mfIndex是表示隶属函数索引的一个整数,此索引表示列出隶属函数的顺序。
例6-28
>>a=newfis('mysys');
>>a=addvar(a,'input','temperature',[0100]);
>>a=addmf(a,'input',1,'cold','trimf',[03060]);
>>getfis(a,'input',1)
返回结果
Name=temperature
NumMFs=1
MFLabels=
cold
Range=[0100]
ans=
[]
>>b=rmmf(a,'input',1,'mf',1);
>>getfis(b,'input',1)
返回
Name=temperature
NumMFs=0
MFLabels=
Range=[0100]
ans=
[]
函数rmvar
格式[fis2,errorStr]=rmvar(fis,'varType',varIndex)
fis2=rmvar(fis,'varType',varIndex)
说明fis2=rmvar(fis,'varType',varIndex),)从与工作空间FIS结构fis相关的模糊推理系统中删除索引为varIndex的语言变量mfIndex,字符串vartype必须是'input'或'output'。
varIndex是表示变量索引的一个整数,此索引表示列出变量的顺序。
[fis2,errorStr]=rmvar(fis,'varType',varIndex)将任何错误信息返回到字符串errorStr。
此命令自动更新规则列表以保证列表尺寸与当前变量数保持一致,在删除语言变量之前,你必须从FIS删除任何包含要删除变量的规则,你无法删除在规则列表中正在使用的模糊变量。
例6-29
>>a=newfis('mysys');
>>a=addvar(a,'input','temperature',[0100]);
>>getfis(a)
返回:
Name=mysys
Type=mamdani
NumInputs=1
InLabels=
temperature
NumOutputs=0
OutLabels=
NumRules=0
AndMethod=min
OrMethod=max
ImpMethod=min
AggMethod=max
DefuzzMethod=centroid
ans=
mysys
>>b=rmvar(a,'input',1);
>>getfis(b)
返回:
Name=mysys
Type=mamdani
NumInputs=0
InLabels=
NumOutputs=0
OutLabels=
NumRules=0
AndMethod=min
OrMethod=max
ImpMethod=min
AggMethod=max
DefuzzMethod=centroid
ans=
mysys
函数setfis
格式a=setfis(a,'fispropname','newfisprop')
a=setfis(a,'vartype',varindex,'varpropname','newvarprop')
a=setfis(a,'vartype',varindex,'mf',mfindex,'mfpropname','newmfprop');
说明可以使用三个、五个或七个输入变量调用setfis命令,使用几个输入变量取决于是否设置整个结构的一个属性,是否设置属于该结构的一个特定变量,还是是否设置属于这些变量之一的一个特定隶属函数。这些变量是:
a:工作空间中FIS的一个变量名称,
vartype:表示变量类型的一个字符串:input或output;
varindex:输入或输出变量的索引;
mf:调用setfis时,七个变量中的第四个变量所用的字符串,用语指明此变量是一个隶属函数;
mfindex:属于所选变量的隶属函数的索引;
fispropname:表示你要设置FIS域属性的一个字符串:name,type,andmethod,ormethod,impmethod,aggmethod,defuzzmethod;
newfisprop:你要设置的FIS的属性或方法名称的一个字符串;
varpropname:你要设置的变量域名称的一个字符串:name或range;
newvarprop:你要设置的变量名称的一个字符串(对name),或变量范围的一个数组(对range),mfpropname—你要设置的隶属函数名称的一个字符串:name,type或params;
newmfprop:你要设置的隶属函数名称或类型域的一个字符串(对name或type)或者是参数范围的一个数组(对params)。
例6-30使用三个变量调用:
>>a=readfis('tipper');
>>a2=setfis(a,'name','eating');
>>getfis(a2,'name');
结果为:
out=
eating
如果使用五个变量,setfis将更新两个变量属性:
>>a2=setfis(a,'input',1,'name','help');
>>getfis(a2,'input',1,'name')
结果为:
ans=
help
如果使用七个变量,setfis将更新七个隶属函数的任意属性:
>>a2=setfis(a,'input',1,'mf',2,'name','wretched');
>>getfis(a2,'input',1,'mf',2,'name')
结果为:
ans=
wretched
函数showfis
格式showfis(fismat)
说明以分行方式显示MATLAB工作空间FIS变量fismat,允许你查看结构的每个域的意义和内容。
例6-31
>>a=readfis('tipper');
>>showfis(a)
返回:
Nametipper
Typemamdani
Inputs/Outputs[21]
NumInputMFs[32]
NumOutputMFs3
NumRules3
AndMethodmin
OrMethodmax
ImpMethodmin
AggMethodmax
DefuzzMethodcentroid
InLabelsservice
food
OutLabelstip
InRange[010]
[010]
OutRange[030]
InMFLabelspoor
good
excellent
rancid
delicious
OutMFLabelscheap
average
generous
InMFTypesgaussmf
gaussmf
gaussmf
trapmf
trapmf
OutMFTypestrimf
trimf
trimf
InMFParams[1.5000]
[1.5500]
[1.51000]
[0013]
[791010]
OutMFParams[05100]
[1015200]
[2025300]
RuleAntecedent[11]
[20]
[32]
RuleConsequent1
2
3
RuleWeigth1
1
1
RuleConnection2
1
2
函数fuzarith
格式C=fuzarith(X,A,B,operator)
说明使用区间算法,C=fuzarith(X,A,B,operator)返回一个模糊集C作为结果,该算法使用由字符串operator表示的函数,并在采样凸模糊集A和B上完成二进制运算;元素A和B由采样值域变量X的凸函数产生;
A,B和X是相同维数的向量;
operator是下列串之一:'sum','sub','prod',and'div';
该函数返回的模糊集C是一个与X具有相同长度的列向量
例6-32
>>point_n=101;%thisdeterminesMF'sresolution
>>min_x=-20;max_x=20;%universeis[min_x,max_x]
>>x=linspace(min_x,max_x,point_n)';
>>A=trapmf(x,[-10-213]);%trapezoidalfuzzysetA
>>B=gaussmf(x,[25]);%GaussianfuzzysetB
>>C1=fuzarith(x,A,B,'sum');
>>subplot(2,1,1);
>>plot(x,A,'b--',x,B,'m:',x,C1,'c');
>>title('fuzzyadditionA+B');
>>C2=fuzarith(x,A,B,'sub');
>>subplot(2,1,2);
>>plot(x,A,'b--',x,B,'m:',x,C2,'c');
>>title('fuzzysubtractionA-B');
>>C3=fuzarith(x,A,B,'prod');
函数parsrule
格式fis2=parsrule(fis,txtRuleList)
fis2=parsrule(fis,txtRuleList,ruleFormat)
fis2=parsrule(fis,txtRuleList,ruleFormat,lang)
说明此函数为MATLAB工作空间FIS变量fis解析定义规则(txtRuleList)的文本,并且返回添加了相应规则列表的一个FIS结构。如果原始输入FIS结构fis有任意初始规则,他们将由新结构fis2替换。本函数支持三种不同的规则格式(由ruleFormat指定'verbose'(语言型)、'symbolic'(符号型)、'indexed'(索引型)。缺省格式是'verbose'(语言型)。当使用可选语言变量lang时,规则以语言型格式进行解析,并采用语言变量lang中指定的关键字。语言必须是'english'、'francais'或'deutsch'。英语关键字是if、then、is、AND、OR和NOT。
例6-33
>>a=readfis('tipper');
>>ruleTxt='ifserviceispoorthentipisgenerous';
>>a2=parsrule(a,ruleTxt,'verbose');
>>showrule(a2)
结果为
ans=
If(serviceispoor)
then(tipisgenerous)
函数ruleedit
格式
ruleedit('a')
ruleedit(a)
说明当使用ruleedit('a')调用规则编辑器时,可用于修改存储在文件a.fis中的一个FIS结构的规则。它也可用于检查模糊推理系统使用的规则。为使用编辑器创建规则,你必须首先用FIS编辑器定义要使用的所有输入输出变量,你可以使用列表框和检查框选择输入、输出变量,连接操作和权重来创建新规则。如图所示,用ruleedit('tank')打开规则编辑器并装入tank.fis中存储的所有规则。
菜单项:在规则编辑器GUI上,有一个菜单棒允许你打开相关的GUI工具、打开和保存系统等。File菜单与FIS编辑器上的File菜单功能相同。
·Edit菜单项包括:
Undo用于恢复最近的改变;
·View菜单项包括:
EditFISproperties…调用FIS编辑器;
Editmembershipfunctions…调用隶属度函数编辑器;
Editrules…调用规则编辑器;
Viewsurface…调用曲面观察器。
·Options菜单项包括:
Language用于选择语言:English、Deutsch和Francais;
Format用于选择格式
·Verbose使用单词“if”、“then”、“AND”、“OR”等创建实际语句。
·Symbolic用某些符号代替Verbose模式中使用的单词。例如:“ifAAND
BthenC”成为“A&B=>C”。
·indexed表示规则如何在FIS结构中存储。
函数ruleview
格式ruleview('a')
说明使用ruleview('a')调用规则观察器时,将绘制在存储文件a.fis中的一个FIS的模糊推理框图。它用于观察从开始到结束整个蕴含过程。你可以移动对应输入的指示线,然后观察系统重新调节并计算新的输出。如图6-29:ruleview('tank')
菜单项:在规则编辑器GUI上,有一个菜单棒允许你打开相关的GUI工具、打开和保存系统,等等。File菜单与FIS编辑器上的File菜单功能相同。
·View菜单项包括:
EditFISproperties…调用FIS编辑器;
Editmembershipfunctions…调用隶属度函数编辑器;
Editrules…调用规则编辑器;
Viewsurface…调用曲面观察器。
·Options菜单项包括:
Rulesdisplayformat用于选择显示规则的格式。如果单击模糊推理方框图左边的规则序号,与该序号相关的规则出现在规则观察器底部的状态棒中。
函数writefis
格式writefis(fismat)
writefis(fismat,'filename')
writefis(fismat,'filename','dialog')
说明writefis将一个MATLAB工作空间FIS结构fismat用一个.fis文件形式保存到磁盘上;
writefis(fismat)产生一个对话框让用户输入文件的名称和存放文件的目录;
writefis(fismat,'filename')将对应于FIS结构fismat的一个.fis文件写到一个称为filename.fis的磁盘文件中,不使用对话框该文件被保存在当前目录中;
writefis(fismat,'filename','dialog')创建一个带有提供的缺省名为filename.fis的对话框;
若扩展名不存在,则只为filename添加.fis扩展名。
例6-34
>>a=newfis('tipper');
>>a=addvar(a,'input','service',[010]);
>>a=addmf(a,'input',1,'poor','gaussmf',[1.50]);
>>a=addmf(a,'input',1,'good','gaussmf',[1.55]);
>>a=addmf(a,'input',1,'excellent','gaussmf',[1.510]);
>>writefis(a,'my_file')
结果为
ans=
my_file
函数showrule
格式showrule(fis)
showrule(fis,indexList)
showrule(fis,indexList,format)
showrule(fis,indexList,format,Lang)
说明此命令用于显示与给定系统相关的规则。
fis是必须提供的变量,这是一个FIS结构在MATLAB工作空间中的变量名;
indexList是你要显示的规则向量(可选项);
format是一个表示返回规则格式的字符串(可选项),showrule可以用三种不同格式的任意一种返回规则:'verbose'(缺省模式,此处English是缺省语言),'symbolic'和'indexed',它们用于隶属度函数的索引引用;
若要使用第四个参数Lang,则Lang必须是verbose(语言)型的,并且下面这种调用showrule(fis,indexList,format,Lang)使用Lang给定的语言显示规则,它们必须是'english','francais'或'deutsch'。
例6-35
>>a=readfis('tipper');
>>showrule(a,1)
ans=
1.If(serviceispoor)or(foodisrancid)then(tipischeap)(1)
>>showrule(a,2)
ans=
2.If(serviceisgood)then(tipisaverage)(1)
>>showrule(a,[31],'symbolic')
ans=
3.(service==excellent)|(food==delicious)=>(tip=generous)(1)
1.(service==poor)|(food==rancid)=>(tip=cheap)(1)
>>showrule(a,1:3,'indexed')
ans=
11,1(1):2
20,2(1):1
32,3(1):2
6.2.21显示FIS结构的所有属性
函数showfis
格式showfis(fismat)
说明以分行方式显示MATLAB工作空间FIS变量fismat,允许你查看结构的每个域的意义和内容。
例6-36
>>a=readfis('tipper');
>>showfis(a)
结果为
Nametipper
Typemamdani
Inputs/Outputs[21]
NumInputMFs[32]
NumOutputMFs3
NumRules3
AndMethodmin
OrMethodmax
ImpMethodmin
AggMethodmax
DefuzzMethodcentroid
InLabelsservice
food
OutLabelstip
InRange[010]
[010]
OutRange[030]
InMFLabelspoor
good
excellent
rancid
delicious
OutMFLabelscheap
average
25.generous
InMFTypesgaussmf
gaussmf
gaussmf
trapmf
30.trapmf
31.OutMFTypestrimf
32.trimf
33.trimf
InMFParams[1.5000]
[1.5500]
36.[1.51000]
[0013]
[791010]
OutMFParams[05100]
[1015200]
[2025300]
RuleAntecedent[11]
[20]
[32]
RuleConsequent1
2
3
RuleWeigth1
1
1
RuleConnection2
1