📄 defucogb.m
字号:
function [xs,x,y] = defucogb(rb,set,inf)% [xs,x,y] = DEFUCOGb(rb,set,inf) Variante b (Kahlert,Frank 1993)%% DEFUzzifisierung nach der Schwerpunktmethode (Center Of Gravity)% MAX-MIN Komposition (inf='min'):% Die Zugeh.fkt. einer Regel entsteht durch Begrenzen (Minimumbildung) der% Zugeh.fkt. der Konklusion auf den momentanen Wahrheitswert der Praemisse.% Der Wahrheitswert des WENN-Teils steht in rb (= n*1 Vektor. n Regeln)% MAX-DOT Komposition (inf='dot'):% Die Zugeh.fkt. einer Regel ensteht durch Multiplikation der Zugeh.fkt. der% Konklusion mit dem Erfuellungsgrad der Regel (Praemisse).% Durch eine MAXimumsbildung werden alle resultierenden Flaechen der DANN-% Teile der Regeln ueberlagert.% Hier wird folgende Naeherung fuer die Schwerpunktberechnung gewaehlt :% (Kahlert,Frank : 'Fuzzy Control,Fuzzy Logic', Vieweg 1993, S.99)% Die Abzissen der Schwerpunkte der Ausgangsmengen aller Regeln werden in% eine mit dem Erfuellungsgrad jeder Regel gewichtete Summe gebracht.% Fuer die Struktur von set siehe die Routinen FUZZIFI.M und PLOT_SET.M. % set ist eine 4*n Matrix. n=Anzahl der Terme (Zugeh.fkt.)% In den Zeilen 1-4 stehen die Punkte P1..P4 die die Trapeze und Dreicke des% zum Ausgang gehoerenden Sets beschreiben. (ling.Variable des Ausgangs)% rb enthaelt die Ergebnisse des WENN-Teils. (Spaltenvektor)% Die Anzahl der Regeln muss mit der Anzahl der Terme uebereinstimmen.% (Zeilen von rb = Spalten von set)% Ein set NUR aus Singletons bestehend ist nicht moeglich.% xs = scharfer Ausgangswert.% x = set nach "Abschneidung" durch Minimumsbildung. (y = Zugehoerigkeiten)%% FSTB - Fuzzy Systems Toolbox for MATLAB% Copyright (c) 1993-1996 by Olaf Wolkenhauer% Control Systems Centre at UMIST% Manchester M60 1QD, UK%% 8-Feb-1994 [r,c]=size(set);% Matrix mit zugehoerigen y-Werten bilden.yset=ones(r,c); yset(1,:)=zeros(1,c); yset(r,:)=zeros(1,c);% Die neuen y-Werte (Zugehoerigkeiten) ermitteln:y=zeros(r,c);% yP2neu,yP3neu = Erfuellungsgrad der Regel:y(2,:)=rb'; y(3,:)=rb'; % P1 und P4 bleiben erhalten. (1.+4. Zeile). Keine inf's moeglich !x=set; s=zeros(1,c); % fuer die Schwerpunkte der Flaechen unter jedem Term.% Fuer jede Zugeh.fkt. eines Terms, Berechnung des Schwerpunktes (Abzisse):for i=1:c, if rb(i)~=0, if inf=='min', % Mittels linearer (exakter) Interpolation zwischen P1 und P2 sowie % zwischen P3 und P4 werden die neuen P2 und P3 ermittelt. x(2,i)=set(1,i)+rb(i).*(set(2,i)-set(1,i)); % = P2neu . x(3,i)=set(3,i)-(rb(i)-1).*(set(4,i)-set(3,i)); % = P3neu . end; % Um den Ueberlappungsfehler zu vermeiden, muesste man hier die Schnitt- % punkte der Polygone ermitteln. % Defuzzifikation : (noch etwas umstaendlich) P1=x(1,i); P2=x(2,i); P3=x(3,i); P4=x(4,i); % Flaechen der drei Teilstuecke eines Trapez (=einer Zugeh.fkt.) : A1=(P2-P1).*rb(i)./2; A2=(P3-P2).*rb(i); A3=(P4-P3).*rb(i)./2; % Schwerpunkte (x-Koordinate) der drei Teilflaechen: xs1=2/3*(P2-P1)+P1; xs2=(P3-P2)/2+P2; xs3=P4-2*(P4-P3)/3; % Schwerpunkt der Zugeh.fkt. unter dem i-ten Term : s(i)=(xs1*A1+xs2*A2+xs3*A3)/(A1+A2+A3); else; s(i)=0; end;end; % Nur Singletons im Ausgangsset (P1=P2=P2=P4) sind nicht moeglich, da A=0 .if 0~=any(rb), xs=(s*rb)./sum(rb); % nach Kahlert,Frank Wichtung mit Erfuellungsgraden.else, xs=NaN ; % Keine Regel ist erfuellt/aktiv !!end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -