В этом примере описываются встроенные методы дефузирования выходного нечеткого набора системы нечеткого вывода Mamdani типа 1.
Рассмотрим следующий выходной нечеткий набор, который является агрегацией трех масштабированных трапециевидных функций членства.
x = 0:0.1:20; mf1 = trapmf(x,[0 2 8 12]); mf2 = trapmf(x,[5 7 12 14]); mf3 = trapmf(x,[12 13 18 19]); mf = max(0.5*mf2,max(0.9*mf1,0.1*mf3)); figure('Tag','defuzz') plot(x,mf,'LineWidth',3) h_gca = gca; h_gca.YTick = [0 .5 1] ; ylim([-1 1])

Программное обеспечение Fuzzy Logic Toolbox™ поддерживает пять встроенных методов вычисления одного точного выходного значения для такого нечеткого набора.
Средняя точка
Средняя линия
Середина максимума
Наименьшее из максимальных
Наибольший из максимальных
Можно также определить собственный пользовательский метод дефуззификации. Дополнительные сведения см. в разделе Создание нечетких систем с использованием пользовательских функций.
Дефузификация центроида возвращает центр тяжести нечеткого множества вдоль оси X. Если рассматривать область как пластину с равномерной толщиной и плотностью, то центроид - это точка вдоль оси X, относительно которой балансировал бы нечеткий набор. Центроид вычисляется по следующей формуле, где (- значение членства для точки xi во вселенной дискурса.
xi)
Вычислите центроид нечеткого множества.
xCentroid = defuzz(x,mf,'centroid');Укажите результат дефузификации центроида на исходном графике.
hCentroid = line([xCentroid xCentroid],[-0.2 1.2],'Color','k'); tCentroid = text(xCentroid,-0.2,' centroid','FontWeight','bold');

Метод bisector находит вертикальную линию, разделяющую нечеткое множество на две подобласти равной площади. Иногда, но не всегда, он совпадает с линией центроида.
xBisector = defuzz(x,mf,'bisector');Укажите результат биссектрисы на исходном графике, а результат центроида - серым цветом.
hBisector = line([xBisector xBisector],[-0.4 1.2],'Color','k'); tBisector = text(xBisector,-0.4,' bisector','FontWeight','bold'); gray = 0.7*[1 1 1]; hCentroid.Color = gray; tCentroid.Color = gray;

MOM, SOM и LOM соответствуют среднему, наименьшему и наибольшему максимуму, соответственно. В этом примере, поскольку агрегатный нечеткий набор имеет плато при своем максимальном значении, результаты дефузификации MOM, SOM и LOM имеют различные значения. Если совокупный нечеткий набор имеет уникальный максимум, то MOM, SOM и LOM получают одно и то же значение.
xMOM = defuzz(x,mf,'mom'); xSOM = defuzz(x,mf,'som'); xLOM = defuzz(x,mf,'lom');
Укажите результаты MOM, SOM и LOM на исходном графике и серым цветом результат биссектрисы.
hMOM = line([xMOM xMOM],[-0.7 1.2],'Color','k'); tMOM = text(xMOM,-0.7,' MOM','FontWeight','bold'); hSOM = line([xSOM xSOM],[-0.7 1.2],'Color','k'); tSOM = text(xSOM,-0.7,' SOM','FontWeight','bold'); hLOM = line([xLOM xLOM],[-0.7 1.2],'Color','k'); tLOM = text(xLOM,-0.7,' LOM','FontWeight','bold'); hBisector.Color = gray; tBisector.Color = gray;

В целом, использование метода centroid по умолчанию является достаточно хорошим для большинства приложений. После того, как вы создали свою начальную нечеткую систему вывода, вы можете попробовать другие методы дефузификации, чтобы увидеть, если какие-либо улучшить ваши результаты вывода.
Выделите результат центроида и серым цветом результаты MOM, SOM и LOM.
hCentroid.Color = 'red'; tCentroid.Color = 'red'; hMOM.Color = gray; tMOM.Color = gray; hSOM.Color = gray; tSOM.Color = gray; hLOM.Color = gray; tLOM.Color = gray;
