78 lines
3.8 KiB
Matlab
78 lines
3.8 KiB
Matlab
%
|
|
% Local script to create FIS (w/o the GUI crap)
|
|
%
|
|
|
|
|
|
% FIS control
|
|
% R2025 compatibility:
|
|
% - newfis->mamfis
|
|
% - defuzzMethod='cos' -> AggregationMethod="sum", DefuzzificationMethod="centroid"
|
|
fis = mamfis( ...
|
|
AndMethod="min", ...
|
|
OrMethod="max", ...
|
|
ImplicationMethod="min", ...
|
|
AggregationMethod="sum", ...
|
|
DefuzzificationMethod="centroid" );
|
|
|
|
% Inputs
|
|
fis = addInput(fis,[0 1],'Name','dh');
|
|
fis = addMF(fis,'dh','trimf',[0 0 0.5],'Name','S');
|
|
fis = addMF(fis,'dh','trimf',[0 0.5 1],'Name','M');
|
|
fis = addMF(fis,'dh','trimf',[0.5 1 1],'Name','L');
|
|
|
|
fis = addInput(fis,[0 1],'Name','dv');
|
|
fis = addMF(fis,'dv','trimf',[0 0 0.5],'Name','S');
|
|
fis = addMF(fis,'dv','trimf',[0 0.5 1],'Name','M');
|
|
fis = addMF(fis,'dv','trimf',[0.5 1 1],'Name','L');
|
|
|
|
fis = addInput(fis,[-180 180],'Name','theta');
|
|
fis = addMF(fis,'theta','trimf',[-180 -180 0],'Name','N');
|
|
fis = addMF(fis,'theta','trimf',[-180 0 180],'Name','ZE');
|
|
fis = addMF(fis,'theta','trimf',[ 0 180 180],'Name','P');
|
|
|
|
% Output
|
|
fis = addOutput(fis,[-130 130],'Name','dtheta');
|
|
fis = addMF(fis,'dtheta','trimf',[-130 -130 0],'Name','N');
|
|
fis = addMF(fis,'dtheta','trimf',[-130 0 130],'Name','ZE');
|
|
fis = addMF(fis,'dtheta','trimf',[ 0 130 130],'Name','P');
|
|
|
|
% Rules
|
|
|
|
fis = addRule(fis, "IF theta IS N dh IS S AND dv IS S AND THEN dtheta IS P");
|
|
fis = addRule(fis, "IF theta IS N dh IS S AND dv IS M AND THEN dtheta IS P");
|
|
fis = addRule(fis, "IF theta IS N dh IS S AND dv IS L AND THEN dtheta IS P");
|
|
fis = addRule(fis, "IF theta IS N dh IS M AND dv IS S AND THEN dtheta IS P");
|
|
fis = addRule(fis, "IF theta IS N dh IS M AND dv IS M AND THEN dtheta IS ZE");
|
|
fis = addRule(fis, "IF theta IS N dh IS M AND dv IS L AND THEN dtheta IS ZE");
|
|
fis = addRule(fis, "IF theta IS N dh IS L AND dv IS S AND THEN dtheta IS P");
|
|
fis = addRule(fis, "IF theta IS N dh IS L AND dv IS M AND THEN dtheta IS P");
|
|
fis = addRule(fis, "IF theta IS N dh IS L AND dv IS L AND THEN dtheta IS P");
|
|
|
|
|
|
fis = addRule(fis, "IF theta IS ZE dh IS S AND dv IS S AND THEN dtheta IS P");
|
|
fis = addRule(fis, "IF theta IS ZE dh IS S AND dv IS M AND THEN dtheta IS P");
|
|
fis = addRule(fis, "IF theta IS ZE dh IS S AND dv IS L AND THEN dtheta IS P");
|
|
fis = addRule(fis, "IF theta IS ZE dh IS M AND dv IS S AND THEN dtheta IS ZE");
|
|
fis = addRule(fis, "IF theta IS ZE dh IS M AND dv IS M AND THEN dtheta IS ZE");
|
|
fis = addRule(fis, "IF theta IS ZE dh IS M AND dv IS L AND THEN dtheta IS ZE");
|
|
fis = addRule(fis, "IF theta IS ZE dh IS L AND dv IS S AND THEN dtheta IS ZE");
|
|
fis = addRule(fis, "IF theta IS ZE dh IS L AND dv IS M AND THEN dtheta IS ZE");
|
|
fis = addRule(fis, "IF theta IS ZE dh IS L AND dv IS L AND THEN dtheta IS ZE");
|
|
|
|
|
|
fis = addRule(fis, "IF theta IS P dh IS S AND dv IS S AND THEN dtheta IS ZE");
|
|
fis = addRule(fis, "IF theta IS P dh IS S AND dv IS M AND THEN dtheta IS ZE");
|
|
fis = addRule(fis, "IF theta IS P dh IS S AND dv IS L AND THEN dtheta IS ZE");
|
|
fis = addRule(fis, "IF theta IS P dh IS M AND dv IS S AND THEN dtheta IS ZE");
|
|
fis = addRule(fis, "IF theta IS P dh IS M AND dv IS M AND THEN dtheta IS ZE");
|
|
fis = addRule(fis, "IF theta IS P dh IS M AND dv IS L AND THEN dtheta IS N");
|
|
fis = addRule(fis, "IF theta IS P dh IS L AND dv IS S AND THEN dtheta IS ZE");
|
|
fis = addRule(fis, "IF theta IS P dh IS L AND dv IS M AND THEN dtheta IS ZE");
|
|
fis = addRule(fis, "IF theta IS P dh IS L AND dv IS L AND THEN dtheta IS N");
|
|
|
|
|
|
writeFIS(fis,'CarFLC');
|
|
|
|
f1 = figure('Name','FLC surface'); gensurf(fis); grid on;
|
|
exportgraphics(f1, sprintf('FLC_surface.png'), 'Resolution', 300);
|