MATLAB函数gensurf,matlab模糊逻辑(二)
6.2?模糊推理結構FIS
6.2.1?不使用數據聚類方法從數據生成FIS結構
函數?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)-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)');
結果為圖6-21。
圖6-21
6.2.2?使用減法聚類方法從數椐生成FIS結構
函數?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.5?0.25?0.3])
這里假定組合的維數是3。假設Xin有兩維、Xout有一維,那么,0.5和0.25是Xin數據維中每一維的作用范圍,0.3是Xout數據維的作用范圍。
fismat?=?genfis2(Xin,Xout,0.5,[-10?-5?0;?10?5?20])
這里指定了如何將Xin和Xout中的數據規范化為[0?1]區間中的值來進行處理。假設Xin有兩維、Xout有一維,那么Xin第一列中的數據是從[-10?+10]比例變換后的值,Xin第二列中的數據是從[-5?+5]比例變換后的值,Xout中的數據是從[0?20]比例變換后的值。
6.2.3?生成一個FIS輸出曲面
函數?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)
結果為圖6-22。
圖6-22
6.2.4?將mamdan型FIS轉換為Sugeno?FIS
函數?mam2sug
格式?sug_fis=mam2sug(mam_fis)
說明?該函數將一個mamdani型FIS結構(不必是單輸出)mam_fis轉化為一個sugeno型結構sug_fis。返回的sugeno型系統具有常值輸出隸屬度函數。這些常值由原來mamdani型系統的后件的隸屬度函數的面積中心法來確定。前件仍保持不變。
6.2.5?完成模糊推理計算
函數?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([2?1;?4?9],fismat)
結果為
out?=
7.0169
19.6810
6.2.6?模糊c均值聚類
函數?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');
結果為圖6-23。
6.2.7?模糊均值和減法聚類
函數?findcluster
格式?findcluster
findcluster('file.dat')
說明?findcluster產生一個GUI上的Method下的下拉式標簽,可以實現模糊C均值(fcm)或模糊減法聚類(subtractiv),使用Load?Data按鈕輸入數據,剛進入GUI時,對每種方法的選項都設置為缺省值。
此工具使用多維數據集,但只顯示這些維數中的兩維。使用X-axis和Y-axis下的下拉式標簽選擇你想觀察的數據維。例如你有一個五維數據集,按照出現在數據集中的順序,此工具將數據標記為data_1,data_2,data_3,data_4,data_5,?Start將完成聚類,Save?Centre將保存聚類中心。
當使用數據集file.data時,findcluster(file.dat)自動裝入數據集,并且只繪制數據集中的前兩維。產生GUI后,你仍可以選擇要聚類數據的那兩維。
例6-24
>>findcluster('clusterdemo.dat')
結果為圖6-24。
6.2.8?繪制一個FIS
函數?plotfis
格式?plotfis(fismat)
說明?此函數顯示由fismat指定的一個FIS的高層方框圖,輸入和它們的隸屬函數出現在結構特征圖的左邊,同時輸出和它們的隸屬函數出現在結構特征圖的右邊。
例6-25
>>a?=?readfis('tipper');
>>plotfis(a)
結果為圖6-25。
?
圖6-24圖6-25
6.2.9?繪制給定變量的所有隸屬的曲線
函數?plotmf
格式?plotmf(fismat,varType,varIndex)
說明?此函數繪制與給定變量相關的稱為fismat的FIS中的所有隸屬函數曲線,變量的類型和索引分別由varType?('input'?或'output')和varIndex給出。此函數也可以與MATLAB函數subplot一起使用。
例6-26
>>a?=?readfis('tipper');
>>plotmf(a,'input',1)
結果為圖6-26。
圖6-26
6.2.10?從磁盤裝入一個FIS
函數?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
6.2.11?從FIS中刪除某一隸屬函數
函數?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',[0?100]);
>>a?=?addmf(a,'input',1,'cold','trimf',[0?30?60]);
>>getfis(a,'input',1)
返回結果
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中刪除變量
函數?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',[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?設置模糊系統屬性
函數?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
6.2.14?以分行形式顯示FIS結構的所有屬性
函數?showfis
格式?showfis(fismat)
說明?以分行方式顯示MATLAB工作空間FIS變量fismat,允許你查看結構的每個域的意義和內容。
例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?完成模糊運算
函數?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;%?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');
結果為圖6-27。
圖6-27
6.2.16?解析模糊規則
函數?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?=?'if?service?is?poor?then?tip?is?generous';
>>a2?=?parsrule(a,ruleTxt,'verbose');
>>showrule(a2)
結果為
ans?=
1.?If?(service?is?poor)?then?(tip?is?generous)?(1)
6.2.17?規則編輯器和語法編輯器
函數?ruleedit
格式?ruleedit('a')
ruleedit(a)
說明?當使用ruleedit('a')調用規則編輯器時,可用于修改存儲在文件a.fis中的一個FIS結構的規則。它也可用于檢查模糊推理系統使用的規則。為使用編輯器創建規則,你必須首先用FIS編輯器定義要使用的所有輸入輸出變量,你可以使用列表框和檢查框選擇輸入、輸出變量,連接操作和權重來創建新規則。如圖所示,用ruleedit('tank')打開規則編輯器并裝入tank.fis中存儲的所有規則。
圖6-28
菜單項:在規則編輯器GUI上,有一個菜單棒允許你打開相關的GUI工具、打開和保存系統等。File菜單與FIS編輯器上的File菜單功能相同。
·Edit菜單項包括:
Undo?用于恢復最近的改變;
·View菜單項包括:
Edit?FIS?properties…?調用FIS編輯器;
Edit?membership?functions…?調用隸屬度函數編輯器;
Edit?rules…?調用規則編輯器;
View?surface…?調用曲面觀察器。
·Options?菜單項包括:
Language?用于選擇語言:English、Deutsch和Francais;
Format?用于選擇格式
·Verbose?使用單詞“if”、“then”、“AND”、“OR”等創建實際語句。
·Symbolic?用某些符號代替Verbose模式中使用的單詞。例如:“if?A?AND
B?then?C”成為“A&B=>C”。
·indexed?表示規則如何在FIS結構中存儲。
6.2.18?規則觀察器和模糊推理框圖
函數?ruleview
格式?ruleview('a')
說明?使用ruleview('a')?調用規則觀察器時,將繪制在存儲文件a.fis中的一個FIS的模糊推理框圖。它用于觀察從開始到結束整個蘊含過程。你可以移動對應輸入的指示線,然后觀察系統重新調節并計算新的輸出。如圖6-29:ruleview('tank'?)
圖6-29
菜單項:在規則編輯器GUI上,有一個菜單棒允許你打開相關的GUI工具、打開和保存系統,等等。File菜單與FIS編輯器上的File菜單功能相同。
·View菜單項包括:
Edit?FIS?properties…?調用FIS編輯器;
Edit?membership?functions…?調用隸屬度函數編輯器;
Edit?rules…?調用規則編輯器;
View?surface…?調用曲面觀察器。
·Options?菜單項包括:
Rules?display?format?用于選擇顯示規則的格式。如果單擊模糊推理方框圖左邊的規則序號,與該序號相關的規則出現在規則觀察器底部的狀態棒中。
6.2.19?保存FIS到磁盤上
函數?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',[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')
結果為?ans?=
my_file
6.2.20?顯示FIS的規則
函數?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?(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結構的所有屬性
函數?showfis
格式?showfis(fismat)
說明?以分行方式顯示MATLAB工作空間FIS變量fismat,允許你查看結構的每個域的意義和內容。
例6-36
>>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.?2matlab
總結
以上是生活随笔為你收集整理的MATLAB函数gensurf,matlab模糊逻辑(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php串行化,PHP串行化与JSON
- 下一篇: php 连接数据库 pod,PHP PD