defucoga.m

来自「FISMAT accommodates different arithmetic」· M 代码 · 共 82 行

M
82
字号
function [xs,x,y] = defucoga(rb,set,inf)% [xs,x,y] = DEFUCOGa(rb,set,inf) Variation a (nach Wernstedt 93)%% 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.% Fuer die Struktur von set siehe die Routinen FUZZIFI.M und PLOT_SET.M. % Hier wird folgende Naeherung fuer die Schwerpunktberechnung gewaehlt :% (J.Wernstedt (und andere) in at 41 (1993) S.153 .)% Die x-Koordinate des Flaechenschwerpunktes (=scharfer Ausgangswert) % ermittelt sich in der gewichteten Summation der Schwerpunkte der Teil-% flaechen. xs=summe ueber alle Terme(Flaeche jedes Terms * Schwerpunkt% jedes Terms) / summe uber alle Terme(Flaeche jedes Terms)% Der Fehler der Naeherungsloesung besteht in den ueberlappenden Bereichen% benachbarter Terme, die mehrfach beruecksichtigt werden.% 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 bestehend NUR aus Singletons 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 bei MIN-Methode: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.A=zeros(1,c);  % fuer die Flaechen der Zugehoerigk.fkt. unter den Termen.% Fuer jede Zugeh.fkt. i eines Terms, Berechnung des Schwerpunktes und der% Flaeche :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:    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);    % Flaeche der Zugeh.fkt. unter dem i-ten Term:    A(i)=A1+A2+A3;  else s(i)=0; A(i)=0; end;end; % Nur Singletons im Ausgangsset (P1=P2=P2=P4) sind nicht moeglich, da A=0 .if 0~=any(rb),  xs=(A*s')./sum(A); % Formel nach Wernstedt. Wichtung mit Teilschwerpunktenelse,   xs=NaN;            % Keine Regel ist erfuellt/aktiv !!end;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?