📄 fuzzy_rule_generation.m
字号:
% Fuzzy control table generation
%Defination of input and output
% two inputs, one output.argument area:[-6,6]
Input1=[-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6];
Input2=[-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6];
Output=[-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6];
%Input and output ligustic terms : NB, NM, NS, ZO, PS,PM,PB
Input1_Terms=[1,2,3,4,5,6,7];
Input2_Terms=[1,2,3,4,5,6,7];
output_Terms=[1,2,3,4,5,6,7];
%Membership of terms, triangle function
Input1_Terms_Membership=[1,0.5,0,0,0,0,0,0,0,0,0,0,0;
0,0.5,1,0.5,0,0,0,0,0,0,0,0,0;
0,0,0,0.5,1,0.5,0,0,0,0,0,0,0;
0,0,0,0,0,0.5,1,0.5,0,0,0,0,0;
0,0,0,0,0,0,0,0.5,1,0.5,0,0,0;
0,0,0,0,0,0,0,0,0,0.5,1,0.5,0;
0,0,0,0,0,0,0,0,0,0,0,0.5,1];
Input2_Terms_Membership=Input1_Terms_Membership;
Output_Terms_Membership=Input1_Terms_Membership;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Fuzzy Relations generation
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Fuzzy rule table, row:Input1; Column: Input2; Value:Output
Rule=[1,1,1,1,2,4,4;
1,1,1,1,2,4,4;
2,2,2,2,4,5,5;
2,2,3,4,5,6,6;
3,3,4,6,6,6,6;
4,4,6,7,7,7,7;
4,4,6,7,7,7,7];
% Relations generation
for i=1:169
for j=1:13
R(i,j)=0;
end
end
for Input1_Terms_Index=1:7
for Input2_Terms_Index=1:7
Output_Terms_Index=Rule(Input1_Terms_Index,Input2_Terms_Index );
A=Input1_Terms_Membership(Input1_Terms_Index,:);
B=Input2_Terms_Membership(Input2_Terms_Index,:);
C=Output_Terms_Membership(Output_Terms_Index,:);
for i=1:13
for j=1:13
R1(i,j)=min(A(i),B(j));
end
end
R2=[ ];
for k=1:13
R2=[R2;R1(k,:)'];
end
for i=1:169
for j=1:13
R3(i,j)=min(R2(i),C(j));
end
end
R=max(R,R3);
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Fuzzy inference, Max-min method
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for Input1_value_index=1:13
for Input2_value_index=1:13
% Using Ad as actual input1 term, Bd as actual input2 term, Cd as actual output term
Input1_value_membership=Input1_Terms_Membership(:,Input1_value_index);
[Max_Input1_value,Max_Input1_index]=max(Input1_value_membership);
Ad=Input1_Terms_Membership(Max_Input1_index,:);
%%
Input2_value_membership=Input2_Terms_Membership(:,Input2_value_index);
[Max_Input2_value,Max_Input2_index]=max(Input2_value_membership);
Bd=Input2_Terms_Membership(Max_Input2_index,:);
%%% inference
for i=1:13
for j=1:13
Rd1(i,j)=min(Ad(i),Bd(j));
end
end
Rd2=[ ];
for k=1:13
Rd2=[Rd2,Rd1(k,:)];
end
for j=1:13
Cd(j)=max(min(Rd2',R(:,j)));
end
%%%%%%%%%%%%
%Unfuzzification: Centroid
%%%%%%%%%%%%%%%%%%%%%
sum1=0;
sum2=0;
for i=1:13
sum1=sum1+Cd(i);
sum2=sum2+Cd(i)*Output(i);
end
OUT=round(sum2/sum1);
%%%%%%%%%Fuzzy control table%%%%%%%%%%%
Fuzzy_Table(Input1_value_index,Input2_value_index)=OUT;
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -