MATLAB函数gensurf,matlab模糊逻辑(二)
6.2?模糊推理結(jié)構(gòu)FIS
6.2.1?不使用數(shù)據(jù)聚類方法從數(shù)據(jù)生成FIS結(jié)構(gòu)
函數(shù)?genfis1
格式?fismat?=?genfis1(data)
fismat?=?genfis1(data,numMFs,inmftype,?outmftype)
說明?genfis1為anfis訓(xùn)練生成一個Sugeno型作為初始條件的FIS結(jié)構(gòu)(初始隸屬函數(shù))。genfis1(data,numMFs,inmftype,?outmftype)使用對數(shù)據(jù)的網(wǎng)格分割方法,從訓(xùn)練數(shù)據(jù)集生成一個FIS結(jié)構(gòu)。Data是訓(xùn)練數(shù)據(jù)矩陣,除最后一列表示單一輸出數(shù)據(jù)外,它的其它各列表示輸入數(shù)據(jù)。NumMFs是一個向量,它的坐標(biāo)指定與每一輸入相關(guān)的隸屬函數(shù)的數(shù)量。如果你想使用每個輸入相關(guān)的相同數(shù)量的隸屬函數(shù),那么只須使numMFs成為一個數(shù)就足夠了。Inmftype是一個字符串?dāng)?shù)組,它的每行指定與每個輸入相關(guān)的隸屬函數(shù)類型。outmftype是一個字符串?dāng)?shù)組,它的指定與每個輸出相關(guān)的隸屬函數(shù)類型
例6-19
>>data?=?[rand(10,1)?10*rand(10,1)-5?rand(10,1)];
>>numMFs?=?[3?7];
>>mfType?=?str2mat('pimf','trimf');
>>fismat?=?genfis1(data,numMFs,mfType);
>>?[x,mf]?=?plotmf(fismat,'input',1);
>>subplot(2,1,1),?plot(x,mf);
>>xlabel('input?1?(pimf)');
>>[x,mf]?=?plotmf(fismat,'input',2);
>>subplot(2,1,2),?plot(x,mf);
>>xlabel('input?2?(trimf)');
結(jié)果為圖6-21。
圖6-21
6.2.2?使用減法聚類方法從數(shù)椐生成FIS結(jié)構(gòu)
函數(shù)?genfis2
格式?fismat?=?genfis2(Xin,Xout,radii)
fismat?=?genfis2(Xin,Xout,radii,xBounds)
fismat?=?genfis2(Xin,Xout,radii,xBounds,options)
說明?Xin是一個矩陣,它的每一行包含一個數(shù)據(jù)點的輸入值;Xout是一個矩陣,它的每一行包含一個數(shù)據(jù)點的輸出值;randi是一個向量,它指定一個聚類中心在一個數(shù)據(jù)維上作用的范圍,這里假定數(shù)據(jù)位于一個單位超立方體內(nèi):xBounds是一個2×N可選矩陣,它用于指定如何將Xin和Xout中的數(shù)據(jù)映射到一個超立方體內(nèi),這里是數(shù)據(jù)的維數(shù)(行數(shù));?options是一個可選向量,它指定的值用于覆蓋算法參數(shù)的缺省值。
例6-20
fismat?=?genfis2(Xin,Xout,0.5)
這是使用此函數(shù)所需的最小變量數(shù)。這里對所有數(shù)據(jù)維指定0.5的作用范圍。
fismat?=?genfis2(Xin,Xout,[0.5?0.25?0.3])
這里假定組合的維數(shù)是3。假設(shè)Xin有兩維、Xout有一維,那么,0.5和0.25是Xin數(shù)據(jù)維中每一維的作用范圍,0.3是Xout數(shù)據(jù)維的作用范圍。
fismat?=?genfis2(Xin,Xout,0.5,[-10?-5?0;?10?5?20])
這里指定了如何將Xin和Xout中的數(shù)據(jù)規(guī)范化為[0?1]區(qū)間中的值來進行處理。假設(shè)Xin有兩維、Xout有一維,那么Xin第一列中的數(shù)據(jù)是從[-10?+10]比例變換后的值,Xin第二列中的數(shù)據(jù)是從[-5?+5]比例變換后的值,Xout中的數(shù)據(jù)是從[0?20]比例變換后的值。
6.2.3?生成一個FIS輸出曲面
函數(shù)?gensurf
格式?gensurf(fis)?%使用前兩個輸入和第一個輸出來生成給定模糊推理系統(tǒng)(fis)的輸出曲面
gensurf(fis,inputs,output)?%使用分別由向量input和標(biāo)量output給定的輸入(一個或兩個)和輸出(只允許一個)來生成一個圖形。
gensurf(fis,inputs,output,grids)?%指定X(第一、水平)和Y(第二、垂直)方向的網(wǎng)格數(shù)。如果是二元向量,X和Y方向上的網(wǎng)格可以獨立設(shè)置。
gensurf(fis,inputs,output,grids,refinput)?%用于多于兩個的輸入,refinput向量的長度與輸入相同:
·將對應(yīng)于要顯示的輸入的refinput項,設(shè)置為NaN;
·對其它輸入的固定值設(shè)置為雙精度實標(biāo)量。
[x,y,z]=gensurf(…)?%返回定義輸出曲面的變量并且刪除自動繪圖。
例6-21
>>a?=?readfis('tipper');
>>gensurf(a)
結(jié)果為圖6-22。
圖6-22
6.2.4?將mamdan型FIS轉(zhuǎn)換為Sugeno?FIS
函數(shù)?mam2sug
格式?sug_fis=mam2sug(mam_fis)
說明?該函數(shù)將一個mamdani型FIS結(jié)構(gòu)(不必是單輸出)mam_fis轉(zhuǎn)化為一個sugeno型結(jié)構(gòu)sug_fis。返回的sugeno型系統(tǒng)具有常值輸出隸屬度函數(shù)。這些常值由原來mamdani型系統(tǒng)的后件的隸屬度函數(shù)的面積中心法來確定。前件仍保持不變。
6.2.5?完成模糊推理計算
函數(shù)?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:指定輸入值的一個數(shù)或一個矩陣,如果輸入是一個M×N矩陣,其中N是輸入變量數(shù),那么evalfis使用?input的每一行作為一個輸入向量,并且為變量output返回M×L矩陣,該矩陣每一行是一個向量并且L是輸出變量數(shù);
fismat:要計算的一個FIS結(jié)構(gòu);
numPts:一個可選變量,它表示在輸入或輸出范圍內(nèi)的采樣點數(shù),在這些點上計算隸屬函數(shù),如果?不使用此變量,就使用101點的缺省值。
Evalfis的值域如下:
Output:大小為ML的輸出矩陣,這里M表示前面指定的輸入值的數(shù)量,L表示FIS的輸出變量數(shù)。
evalfis的可選值域變量只有當(dāng)input是一個行向量時才計算這些可選值域變量是:
IRR:通過隸屬函數(shù)計算的輸入變量的結(jié)果,這是一個大小為numRulesN的矩陣,這里numRules是規(guī)則條數(shù),N是輸入變量數(shù)。
ORR:通過隸屬函數(shù)計算的輸出變量的結(jié)果,這是一個大小為numPtsnumRulesL的矩陣,這里numRules是規(guī)則條數(shù),L是輸出變量數(shù),此矩陣的第一組numRules列,對應(yīng)于第一個輸出,第二組numRules?對應(yīng)于第二個輸出,依次類推。
ARR:對每個輸出,在輸出值域中,numPts處采樣合成值的numPtsL矩陣,當(dāng)只有一個值域變量調(diào)用時,該函數(shù)使用由結(jié)構(gòu)fismat指定的模糊推理系統(tǒng),由標(biāo)量或矩陣inout指定的輸入值計算輸出向量output。
例6-22
>>fismat?=?readfis('tipper');
>>out?=?evalfis([2?1;?4?9],fismat)
結(jié)果為
out?=
7.0169
19.6810
6.2.6?模糊c均值聚類
函數(shù)?fcm
格式?[center,U,obj_fcn]?=?fcm(data,cluster_n)
說明?對給定的數(shù)據(jù)集應(yīng)用模糊c均值聚類方法進行聚類
data:要聚類的數(shù)據(jù)集,每行是一個采樣數(shù)據(jù)點;
cluster_n:聚類中心的個數(shù)(大于1)
center:迭代后得到的聚類中心的矩陣,這里每行給出聚類中心的坐標(biāo);
U:得到的所有點對聚類中心的模糊分類矩陣或隸屬度函數(shù)矩陣;
Obj_fcn:迭代過程中,目標(biāo)函數(shù)的值;
fcm(data,cluster_n,options)使用可選的變量options控制聚類參數(shù)。包括停止準(zhǔn)則,和/或設(shè)置迭代信息顯示:
options(1):分類矩陣U的指數(shù),缺省值是2.0;
options(2):最大迭代次數(shù),缺省值是100;
options(3):最小改進量,即迭代停止的誤差準(zhǔn)則,缺省值是1e-5;
option(4):迭代過程中顯示信息,缺省值是1。
如果任意一項為NaN,這些選項就使用缺省值;當(dāng)達到最大迭代次數(shù)時,或目標(biāo)函數(shù)兩次連續(xù)迭代的改進量小于指定的最小改進量,即滿足停止誤差準(zhǔn)則時,聚類過程結(jié)束。
例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');
結(jié)果為圖6-23。
6.2.7?模糊均值和減法聚類
函數(shù)?findcluster
格式?findcluster
findcluster('file.dat')
說明?findcluster產(chǎn)生一個GUI上的Method下的下拉式標(biāo)簽,可以實現(xiàn)模糊C均值(fcm)或模糊減法聚類(subtractiv),使用Load?Data按鈕輸入數(shù)據(jù),剛進入GUI時,對每種方法的選項都設(shè)置為缺省值。
此工具使用多維數(shù)據(jù)集,但只顯示這些維數(shù)中的兩維。使用X-axis和Y-axis下的下拉式標(biāo)簽選擇你想觀察的數(shù)據(jù)維。例如你有一個五維數(shù)據(jù)集,按照出現(xiàn)在數(shù)據(jù)集中的順序,此工具將數(shù)據(jù)標(biāo)記為data_1,data_2,data_3,data_4,data_5,?Start將完成聚類,Save?Centre將保存聚類中心。
當(dāng)使用數(shù)據(jù)集file.data時,findcluster(file.dat)自動裝入數(shù)據(jù)集,并且只繪制數(shù)據(jù)集中的前兩維。產(chǎn)生GUI后,你仍可以選擇要聚類數(shù)據(jù)的那兩維。
例6-24
>>findcluster('clusterdemo.dat')
結(jié)果為圖6-24。
6.2.8?繪制一個FIS
函數(shù)?plotfis
格式?plotfis(fismat)
說明?此函數(shù)顯示由fismat指定的一個FIS的高層方框圖,輸入和它們的隸屬函數(shù)出現(xiàn)在結(jié)構(gòu)特征圖的左邊,同時輸出和它們的隸屬函數(shù)出現(xiàn)在結(jié)構(gòu)特征圖的右邊。
例6-25
>>a?=?readfis('tipper');
>>plotfis(a)
結(jié)果為圖6-25。
?
圖6-24圖6-25
6.2.9?繪制給定變量的所有隸屬的曲線
函數(shù)?plotmf
格式?plotmf(fismat,varType,varIndex)
說明?此函數(shù)繪制與給定變量相關(guān)的稱為fismat的FIS中的所有隸屬函數(shù)曲線,變量的類型和索引分別由varType?('input'?或'output')和varIndex給出。此函數(shù)也可以與MATLAB函數(shù)subplot一起使用。
例6-26
>>a?=?readfis('tipper');
>>plotmf(a,'input',1)
結(jié)果為圖6-26。
圖6-26
6.2.10?從磁盤裝入一個FIS
函數(shù)?readfis
格式?fismat?=?readfis('filename')
說明?從磁盤上的一個.fis文件(由filename命名)讀出一個模糊推理系統(tǒng),并將產(chǎn)生的FIS裝入當(dāng)前的工作空間中。Fismat?=?readfis不帶輸入變量,即沒有指定文件名時,使用uigetfile命令打開一個對話框,提示用戶指定文件的名稱和目錄位置。
例6-27
>>fismat?=?readfis('tipper');
>>getfis(fismat)
返回結(jié)果
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
6.2.11?從FIS中刪除某一隸屬函數(shù)
函數(shù)?rmmf
格式?fis?=?rmmf(fis,'varType',varIndex,'mf',mfIndex)
說明?從與工作空間FIS結(jié)構(gòu)fis相關(guān)的模糊推理系統(tǒng)中刪除變量類型為varType,索引為varIndex的隸屬函數(shù)mfIndex。
字符串vartype必須是'input'或'output'。
varIndex是表示變量索引的一個整數(shù),此索引表示列出變量的順序;
變量'mf?'是表示隸屬函數(shù)的一個字符串;
mfIndex是表示隸屬函數(shù)索引的一個整數(shù),此索引表示列出隸屬函數(shù)的順序。
例6-28
>>a?=?newfis('mysys');
>>a?=?addvar(a,'input','temperature',[0?100]);
>>a?=?addmf(a,'input',1,'cold','trimf',[0?30?60]);
>>getfis(a,'input',1)
返回結(jié)果
Name?=?temperature
NumMFs?=?1
MFLabels?=
cold
Range?=?[0?100]
ans?=
[?]
>>b?=?rmmf(a,'input',1,'mf',1);
>>getfis(b,'input',1)
返回
Name?=?temperature
NumMFs?=?0
MFLabels?=
Range?=?[0?100]
ans?=
[?]
6.2.12?從FIS中刪除變量
函數(shù)?rmvar
格式?[fis2,errorStr]?=?rmvar(fis,'varType',varIndex)
fis2?=?rmvar(fis,'varType',varIndex)
說明?fis2?=?rmvar(fis,'varType',varIndex),)從與工作空間FIS結(jié)構(gòu)fis相關(guān)的模糊推理系統(tǒng)中刪除索引為varIndex的語言變量mfIndex,字符串vartype必須是'input'或'output'。
varIndex是表示變量索引的一個整數(shù),此索引表示列出變量的順序。
[fis2,errorStr]?=?rmvar(fis,'varType',varIndex)?將任何錯誤信息返回到字符串errorStr。
此命令自動更新規(guī)則列表以保證列表尺寸與當(dāng)前變量數(shù)保持一致,在刪除語言變量之前,你必須從FIS刪除任何包含要刪除變量的規(guī)則,你無法刪除在規(guī)則列表中正在使用的模糊變量。
例6-29
>>a?=?newfis('mysys');
>>a?=?addvar(a,'input','temperature',[0?100]);
>>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
6.2.13?設(shè)置模糊系統(tǒng)屬性
函數(shù)?setfis
格式?a?=?setfis(a,'fispropname','newfisprop')
a?=?setfis(a,'vartype',varindex,'varpropname','newvarprop')
a?=?setfis(a,'vartype',varindex,'mf',mfindex,?'mfpropname','newmfprop');
說明?可以使用三個、五個或七個輸入變量調(diào)用setfis命令,使用幾個輸入變量取決于是否設(shè)置整個結(jié)構(gòu)的一個屬性,是否設(shè)置屬于該結(jié)構(gòu)的一個特定變量,還是是否設(shè)置屬于這些變量之一的一個特定隸屬函數(shù)。這些變量是:
a:工作空間中FIS的一個變量名稱,
vartype:表示變量類型的一個字符串:input或output;
varindex:輸入或輸出變量的索引;
mf:調(diào)用setfis時,七個變量中的第四個變量所用的字符串,用語指明此變量是一個隸屬函數(shù);
mfindex:屬于所選變量的隸屬函數(shù)的索引;
fispropname:表示你要設(shè)置FIS域?qū)傩缘囊粋€字符串:name,type,andmethod,?ormethod,?impmethod,aggmethod,defuzzmethod;
newfisprop:你要設(shè)置的FIS的屬性或方法名稱的一個字符串;
varpropname:你要設(shè)置的變量域名稱的一個字符串:name或range;
newvarprop:你要設(shè)置的變量名稱的一個字符串(對name),或變量范圍的一個數(shù)組(對range),mfpropname—你要設(shè)置的隸屬函數(shù)名稱的一個字符串:name,type或params;
newmfprop:你要設(shè)置的隸屬函數(shù)名稱或類型域的一個字符串(對name或type)或者是參數(shù)范圍的一個數(shù)組(對params)。
例6-30?使用三個變量調(diào)用:
>>a?=?readfis('tipper');
>>a2?=?setfis(a,?'name',?'eating');
>>getfis(a2,?'name');
結(jié)果為:
out?=
eating
如果使用五個變量,setfis將更新兩個變量屬性:
>>a2?=?setfis(a,'input',1,'name','help');
>>getfis(a2,'input',1,'name')
結(jié)果為:
ans?=
help
如果使用七個變量,setfis將更新七個隸屬函數(shù)的任意屬性:
>>a2?=?setfis(a,'input',1,'mf',2,'name','wretched');
>>getfis(a2,'input',1,'mf',2,'name')
結(jié)果為:
ans?=
wretched
6.2.14?以分行形式顯示FIS結(jié)構(gòu)的所有屬性
函數(shù)?showfis
格式?showfis(fismat)
說明?以分行方式顯示MATLAB工作空間FIS變量fismat,允許你查看結(jié)構(gòu)的每個域的意義和內(nèi)容。
例6-31
>>a?=?readfis('tipper');
>>showfis(a)
返回:
1.?Name?tipper
2.?Type?mamdani
3.?Inputs/Outputs?[2?1]
4.?NumInputMFs?[3?2]
5.?NumOutputMFs?3
6.?NumRules?3
7.?AndMethod?min
8.?OrMethod?max
9.?ImpMethod?min
10.?AggMethod?max
11.?DefuzzMethod?centroid
12.?InLabels?service
13.?food
14.?OutLabels?tip
15.?InRange?[0?10]
16.?[0?10]
17.?OutRange?[0?30]
18.?InMFLabels?poor
19.?good
20.?excellent
21.?rancid
22.?delicious
23.?OutMFLabels?cheap
24.?average
25.?generous
26.?InMFTypes?gaussmf
27.?gaussmf
28.?gaussmf
29.?trapmf
30.?trapmf
31.?OutMFTypes?trimf
32.?trimf
33.?trimf
34.?InMFParams?[1.5?0?0?0]
35.?[1.5?5?0?0]
36.?[1.5?10?0?0]
37.?[0?0?1?3]
38.?[7?9?10?10]
39.?OutMFParams?[0?5?10?0]
40.?[10?15?20?0]
41.?[20?25?30?0]
42.?Rule?Antecedent?[1?1]
43.?[2?0]
44.?[3?2]
42.?Rule?Consequent?1
43.?2
44.?3
42.?Rule?Weigth?1
43.?1
44.?1
42.?Rule?Connection?2
43.?1
44.?2
6.2.15?完成模糊運算
函數(shù)?fuzarith
格式?C?=?fuzarith(X,?A,?B,?operator)
說明?使用區(qū)間算法,C?=?fuzarith(X,?A,?B,?operator)返回一個模糊集C作為結(jié)果,該算法使用由字符串operator表示的函數(shù),并在采樣凸模糊集A和B上完成二進制運算;元素A和B由采樣值域變量X的凸函數(shù)產(chǎn)生;
A,B和X是相同維數(shù)的向量;
operator是下列串之一:'sum',?'sub',?'prod',?and?'div';
該函數(shù)返回的模糊集C是一個與X具有相同長度的列向量
例6-32
>>point_n?=?101;%?this?determines?MF's?resolution
>>min_x?=?-20;?max_x?=?20;%?universe?is?[min_x,?max_x]
>>x?=?linspace(min_x,?max_x,?point_n)';
>>A?=?trapmf(x,?[-10?-2?1?3]);%?trapezoidal?fuzzy?set?A
>>B?=?gaussmf(x,?[2?5]);%?Gaussian?fuzzy?set?B
>>C1?=?fuzarith(x,?A,?B,?'sum');
>>subplot(2,1,1);
>>plot(x,?A,?'b--',?x,?B,?'m:',?x,?C1,?'c');
>>title('fuzzy?addition?A+B');
>>C2?=?fuzarith(x,?A,?B,?'sub');
>>subplot(2,1,2);
>>plot(x,?A,?'b--',?x,?B,?'m:',?x,?C2,?'c');
>>title('fuzzy?subtraction?A-B');
>>C3?=?fuzarith(x,?A,?B,?'prod');
結(jié)果為圖6-27。
圖6-27
6.2.16?解析模糊規(guī)則
函數(shù)?parsrule
格式?fis2?=?parsrule(fis,txtRuleList)
fis2?=?parsrule(fis,txtRuleList,ruleFormat)
fis2?=?parsrule(fis,txtRuleList,ruleFormat,lang)
說明?此函數(shù)為MATLAB工作空間FIS變量fis解析定義規(guī)則(txtRuleList)的文本,并且返回添加了相應(yīng)規(guī)則列表的一個FIS結(jié)構(gòu)。如果原始輸入FIS結(jié)構(gòu)fis有任意初始規(guī)則,他們將由新結(jié)構(gòu)fis2替換。本函數(shù)支持三種不同的規(guī)則格式(由ruleFormat指定'verbose'?(語言型)、'symbolic'?(符號型)、'indexed'?(索引型)。缺省格式是'verbose'?(語言型)。當(dāng)使用可選語言變量lang時,規(guī)則以語言型格式進行解析,并采用語言變量lang中指定的關(guān)鍵字。語言必須是'english'、'francais'或'deutsch'。英語關(guān)鍵字是if、then、is、AND、OR和NOT。
例6-33
>>a?=?readfis('tipper');
>>ruleTxt?=?'if?service?is?poor?then?tip?is?generous';
>>a2?=?parsrule(a,ruleTxt,'verbose');
>>showrule(a2)
結(jié)果為
ans?=
1.?If?(service?is?poor)?then?(tip?is?generous)?(1)
6.2.17?規(guī)則編輯器和語法編輯器
函數(shù)?ruleedit
格式?ruleedit('a')
ruleedit(a)
說明?當(dāng)使用ruleedit('a')調(diào)用規(guī)則編輯器時,可用于修改存儲在文件a.fis中的一個FIS結(jié)構(gòu)的規(guī)則。它也可用于檢查模糊推理系統(tǒng)使用的規(guī)則。為使用編輯器創(chuàng)建規(guī)則,你必須首先用FIS編輯器定義要使用的所有輸入輸出變量,你可以使用列表框和檢查框選擇輸入、輸出變量,連接操作和權(quán)重來創(chuàng)建新規(guī)則。如圖所示,用ruleedit('tank')打開規(guī)則編輯器并裝入tank.fis中存儲的所有規(guī)則。
圖6-28
菜單項:在規(guī)則編輯器GUI上,有一個菜單棒允許你打開相關(guān)的GUI工具、打開和保存系統(tǒng)等。File菜單與FIS編輯器上的File菜單功能相同。
·Edit菜單項包括:
Undo?用于恢復(fù)最近的改變;
·View菜單項包括:
Edit?FIS?properties…?調(diào)用FIS編輯器;
Edit?membership?functions…?調(diào)用隸屬度函數(shù)編輯器;
Edit?rules…?調(diào)用規(guī)則編輯器;
View?surface…?調(diào)用曲面觀察器。
·Options?菜單項包括:
Language?用于選擇語言:English、Deutsch和Francais;
Format?用于選擇格式
·Verbose?使用單詞“if”、“then”、“AND”、“OR”等創(chuàng)建實際語句。
·Symbolic?用某些符號代替Verbose模式中使用的單詞。例如:“if?A?AND
B?then?C”成為“A&B=>C”。
·indexed?表示規(guī)則如何在FIS結(jié)構(gòu)中存儲。
6.2.18?規(guī)則觀察器和模糊推理框圖
函數(shù)?ruleview
格式?ruleview('a')
說明?使用ruleview('a')?調(diào)用規(guī)則觀察器時,將繪制在存儲文件a.fis中的一個FIS的模糊推理框圖。它用于觀察從開始到結(jié)束整個蘊含過程。你可以移動對應(yīng)輸入的指示線,然后觀察系統(tǒng)重新調(diào)節(jié)并計算新的輸出。如圖6-29:ruleview('tank'?)
圖6-29
菜單項:在規(guī)則編輯器GUI上,有一個菜單棒允許你打開相關(guān)的GUI工具、打開和保存系統(tǒng),等等。File菜單與FIS編輯器上的File菜單功能相同。
·View菜單項包括:
Edit?FIS?properties…?調(diào)用FIS編輯器;
Edit?membership?functions…?調(diào)用隸屬度函數(shù)編輯器;
Edit?rules…?調(diào)用規(guī)則編輯器;
View?surface…?調(diào)用曲面觀察器。
·Options?菜單項包括:
Rules?display?format?用于選擇顯示規(guī)則的格式。如果單擊模糊推理方框圖左邊的規(guī)則序號,與該序號相關(guān)的規(guī)則出現(xiàn)在規(guī)則觀察器底部的狀態(tài)棒中。
6.2.19?保存FIS到磁盤上
函數(shù)?writefis
格式?writefis(fismat)
writefis(fismat,'filename')
writefis(fismat,'filename','dialog')
說明?writefis將一個MATLAB工作空間FIS結(jié)構(gòu)fismat用一個.fis文件形式保存到磁盤上;
writefis(fismat)產(chǎn)生一個對話框讓用戶輸入文件的名稱和存放文件的目錄;
writefis(fismat,'filename')將對應(yīng)于FIS結(jié)構(gòu)fismat的一個.fis文件寫到一個稱為filename.fis的磁盤文件中,不使用對話框該文件被保存在當(dāng)前目錄中;
writefis(fismat,'filename','dialog')創(chuàng)建一個帶有提供的缺省名為filename.fis的對話框;
若擴展名不存在,則只為filename添加.fis擴展名。
例6-34
>>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]);
>>a?=?addmf(a,'input',1,'excellent','gaussmf',[1.5?10]);
>>writefis(a,'my_file')
結(jié)果為?ans?=
my_file
6.2.20?顯示FIS的規(guī)則
函數(shù)?showrule
格式?showrule(fis)
showrule(fis,indexList)
showrule(fis,indexList,format)
showrule(fis,indexList,format,Lang)
說明?此命令用于顯示與給定系統(tǒng)相關(guān)的規(guī)則。
fis是必須提供的變量,這是一個FIS結(jié)構(gòu)在MATLAB工作空間中的變量名;
indexList是你要顯示的規(guī)則向量(可選項);
format是一個表示返回規(guī)則格式的字符串(可選項),showrule可以用三種不同格式的任意一種返回規(guī)則:'verbose'?(缺省模式,此處English是缺省語言),'symbolic'和'indexed',它們用于隸屬度函數(shù)的索引引用;
若要使用第四個參數(shù)Lang,則Lang必須是verbose(語言)型的,并且下面這種調(diào)用showrule(fis,indexList,format,Lang)使用Lang給定的語言顯示規(guī)則,它們必須是'english','francais'或'deutsch'。
例6-35
>>a?=?readfis('tipper');
>>showrule(a,1)
ans?=
1.?If?(service?is?poor)?or?(food?is?rancid)?then?(tip?is?cheap)?(1)
>>showrule(a,2)
ans?=
2.?If?(service?is?good)?then?(tip?is?average)?(1)
>>showrule(a,[3?1],'symbolic')
ans?=
3.?(service==excellent)?|?(food==delicious)?=>?(tip=generous)?(1)
1.?(service==poor)?|?(food==rancid)?=>?(tip=cheap)?(1)
>>showrule(a,1:3,'indexed')
ans?=
1?1,?1?(1)?:?2
2?0,?2?(1)?:?1
3?2,?3?(1)?:?2
6.2.21?顯示FIS結(jié)構(gòu)的所有屬性
函數(shù)?showfis
格式?showfis(fismat)
說明?以分行方式顯示MATLAB工作空間FIS變量fismat,允許你查看結(jié)構(gòu)的每個域的意義和內(nèi)容。
例6-36
>>a?=?readfis('tipper');
>>showfis(a)
結(jié)果為
1.?Name?tipper
2.?Type?mamdani
3.?Inputs/Outputs?[2?1]
4.?NumInputMFs?[3?2]
5.?NumOutputMFs?3
6.?NumRules?3
7.?AndMethod?min
8.?OrMethod?max
9.?ImpMethod?min
10.?AggMethod?max
11.?DefuzzMethod?centroid
12.?InLabels?service
13.?food
14.?OutLabels?tip
15.?InRange?[0?10]
16.?[0?10]
17.?OutRange?[0?30]
18.?InMFLabels?poor
19.?good
20.?excellent
21.?rancid
22.?delicious
23.?OutMFLabels?cheap
24.?average
25.?generous
26.?InMFTypes?gaussmf
27.?gaussmf
28.?gaussmf
29.?trapmf
30.?trapmf
31.?OutMFTypes?trimf
32.?trimf
33.?trimf
34.?InMFParams?[1.5?0?0?0]
35.?[1.5?5?0?0]
36.?[1.5?10?0?0]
37.?[0?0?1?3]
38.?[7?9?10?10]
39.?OutMFParams?[0?5?10?0]
40.?[10?15?20?0]
41.?[20?25?30?0]
42.?Rule?Antecedent?[1?1]
43.?[2?0]
44.?[3?2]
42.?Rule?Consequent?1
43.?2
44.?3
42.?Rule?Weigth?1
43.?1
44.?1
42.?Rule?Connection?2
43.?1
44.?2matlab
總結(jié)
以上是生活随笔為你收集整理的MATLAB函数gensurf,matlab模糊逻辑(二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php串行化,PHP串行化与JSON
- 下一篇: spwm逆变器双极性matlab教程,三