www.gusucode.com > fuzzy_featured 案例源码程序 matlab代码 > fuzzy_featured/defuzzdm.m

    %% Defuzzification Methods
% This example shows how to display five defuzzification methods supported
% in the Fuzzy Logic Toolbox(TM).

% Copyright 1994-2014 The MathWorks, Inc.


%% Problem Setup
% Suppose you have the following region to be defuzzified. What are some of
% the methods you might choose?

x = -10:0.1:10;

mf1 = trapmf(x,[-10 -8 -2 2]);
mf2 = trapmf(x,[-5 -3 2 4]);
mf3 = trapmf(x,[2 3 8 9]);
mf1 = max(0.5*mf2,max(0.9*mf1,0.1*mf3));

figure('Tag','defuzz');
plot(x,mf1,'LineWidth',3);
h_gca = gca;
h_gca.YTick = [0 .5 1] ;
ylim([-1 1]);


%% Centroid
% Centroid defuzzification returns the center of area under the curve. If
% you think of the area as a plate of equal density, the centroid is the
% point along the x axis about which this shape would balance.

x1 = defuzz(x,mf1,'centroid'); % #ok<*NOPTS>

h1 = line([x1 x1],[-0.2 1.2],'Color','k'); 
t1 = text(x1,-0.2,' centroid','FontWeight','bold');

%% Bisector
% The bisector is the vertical line that will divide the region into two
% sub-regions of equal area. It is sometimes, but not always coincident
% with the centroid line.

x2 =  defuzz(x,mf1,'bisector');

gray = 0.7*[1 1 1];
h1.Color = gray;
t1.Color = gray;
h2 = line([x2 x2],[-0.4 1.2],'Color','k'); 
t2 = text(x2,-0.4,' bisector','FontWeight','bold');

%% Middle, Smallest, and Largest of Maximum
% MOM, SOM, and LOM stand for Middle, Smallest, and Largest of Maximum,
% respectively. These three methods key off the maximum value assumed by
% the aggregate membership function. In this example, because there is a
% plateau at the maximum value, they are distinct. If the aggregate
% membership function has a unique maximum, then MOM, SOM, and LOM all take
% on the same value.

x3 = defuzz(x,mf1,'mom')
x4 = defuzz(x,mf1,'som')
x5 = defuzz(x,mf1,'lom')

h2.Color = gray;
t2.Color = gray;

h3 = line([x3 x3],[-0.7 1.2],'Color','k'); 
t3 = text(x3,-0.7,' MOM','FontWeight','bold');
h4 = line([x4 x4],[-0.8 1.2],'Color','k'); 
t4 = text(x4,-0.8,' SOM','FontWeight','bold');
h5 = line([x5 x5],[-0.6 1.2],'Color','k'); 
t5 = text(x5,-0.6,' LOM','FontWeight','bold');

%% Picking a Method
% Which of these methods is the right one? There's no simple answer. But if
% you want to get started quickly, generally the centroid method is good
% enough. Later you can always change your defuzzification method to see if
% another method works better.

h3.Color = gray;
t3.Color = gray;
h4.Color = gray;
t4.Color = gray;
h5.Color = gray;
t5.Color = gray;
h1.Color = 'red';
t1.Color = 'red';


%%