fuzzifi.m
来自「FISMAT accommodates different arithmetic」· M 代码 · 共 68 行
M
68 行
function ms=fuzzifi(set,x)% ms=fuzzifi(set,x)% % Fuzzifisierung der Eingangsgroese x auf die Menge SET.% In jeder Spalte von SET stehen 4 Werte, die die 4 Punkte einer Zugehoerig-% keitsfunktion eindeutig bestimmen. Von oben nach unten sind dies P1...P4.% Moeglich sind Dreicke und Trapeze (offene und geschlossene). % Soll ein Trapez offen sein muss fuer P1=-inf (ganz links liegende Zugeh.% fkt.) bzw. P4=+inf (ganz rechts liegende Zugeh.fkt.) stehen. Ansonsten % stehen die fuer P2 und P3 Zugehoerigkeitswerte von 1 und fuer P1 und P4% Zugehoerigkeitswerte von 0.% ms hat eine Zeile. % In jeder Spalte steht der Zugehoerigkeitswert zu der korresspondierenden% Zugehoerigkeitsfunktion.% Grafische Darstellung des Sets mit den Zugeh.fkt. mit der Routine PLOT_SET% Bsp.: set=[[-inf,-2 ,-1.6,-1 ] P1 (vier Zugehoerigkeitsfunktionen% [-2 ,-1.6,-1.2,-0.6] P2 von links nach rechts)% [-2 ,-1.6,-1 ,-0.6] P3% [0 , 1 ,-0.8,-0.6]] P4 (P1..P4 von links nach rechts)%% 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); % c = Anzahl der Terme / Zugeh.fkt.lb=set(1,:); % alle P1. (=untere Intervallgrenze fuer jede Zugeh.fkt.ub=set(r,:); % alle P4. (=obere Intervallgrenze fuer jede Zugeh.fkt.ms=zeros(1,c); % Ergebnismatrix initialisieren.yset=ones(r,c); yset(1,:)=zeros(1,c); yset(r,:)=zeros(1,c);infs=[find(set==-inf),find(set==inf)];if ~isempty(infs), yset(infs)=ones(1,length(infs));end; % yset enthaelt jetzt die Zugeh.werte 0 und 1 % fuer alle Punkte.dyset=diff(yset); dset=diff(set);zers=find(dset==0); % Nullen die Division durch Null erzeugen finden, % und durch dummy ersetzen. Korrektur weiter unten.dset(zers)=ones(1,length(zers)); fu=find(ub>=x); % Feststellung, fuer welche Zugeh.fkt. x im Intervallfl=find(lb<=x); % liegt.lvu=zeros(1,c); lvl=lvu;lvu(fu)=ones(1,length(fu)); lvl(fl)=ones(1,length(fl));lv=lvu-lvl; lv=abs(lv); % Eine 0 in lv bedeutet, dass x in der dieser % Spalte zugeh. Zugeh.fkt. einen Zugeh.wert >0 haty=zeros(3,c);for j=1:c, % Interpolation der Zugeh.keit fuer jede Zugeh.fkt. j zu x(i) if lv(j)==0, % x liegt im entsprechenden Intervall. % lin.Interpol.: y=y0+(x-x0)(y1-y0)/(x1-x0) y(:,j)=(x.*ones(3,1)-set(1:3,j)).*dyset(:,j)./dset(:,j); nans=find(isnan(y)); % inf*0 ergibt leider NaN. Gegen 0 ersetzen y(nans)=zeros(nans); y(:,j)=yset(1:3,j)+y(:,j); % Rest der Interpolationsformel. else % Zugehoerigkeit = 0. y(:,j)=zeros(3,1); end;end;y(zers)=ones(1,length(zers)); % Korrektur um Division zu vermeiden. % Zugeh.=inf wird durch 1 ersetzt.ms=min(y);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?