fis = mamfis('Name', "Fuzzy_Demo_2in1out")
fis =
mamfis with properties:
Name: "Fuzzy_Demo_2in1out"
AndMethod: "min"
OrMethod: "max"
ImplicationMethod: "min"
AggregationMethod: "max"
DefuzzificationMethod: "centroid"
DisableStructuralChecks: 0
Inputs: [0×0 fisvar]
Outputs: [0×0 fisvar]
Rules: [0×0 fisrule]
See 'getTunableSettings' method for parameter optimization.
fis = addInput(fis, [-1 1], 'Name', 'in1');
fis = addMF(fis, 'in1', 'gaussmf', [0.5 -1], 'Name', 'N');
fis = addMF(fis, 'in1', 'gaussmf', [0.5 1], 'Name', 'P');
fis = addInput(fis, [-1 1], 'Name', 'in2');
fis = addMF(fis, 'in2', 'gaussmf', [0.5 -1], 'Name', 'N');
fis = addMF(fis, 'in2', 'gaussmf', [0.5 1], 'Name', 'P');
sigma = 0.5*(2.5 - 0)/sqrt(-2*log(cross));
fis = addOutput(fis, [-2.5 2.5], 'Name', 'out');
fis = addMF(fis, 'out', 'gaussmf', [sigma -2.5], 'Name', 'N');
fis = addMF(fis, 'out', 'gaussmf', [sigma 0.0], 'Name', 'Z');
fis = addMF(fis, 'out', 'gaussmf', [sigma 2.5], 'Name', 'P');
plotmf(fis, 'input', 1), grid on, title('in1 and in2')
plotmf(fis, 'output', 1), grid on, title('U')
"in1==N & in2==N => out=N"; ...
"in1==N & in2==P => out=Z"; ...
"in1==P & in2==N => out=Z"; ...
"in1==P & in2==P => out=P"; ...
fis = addRule(fis, rules);
opt = gensurfOptions('NumGridPoints', 41);
gensurf(fis, opt), title('Output Surface')
[output, fuzzifiedIn, ruleOut, aggregatedOut, ruleFiring] = evalfis(fis, [-0.25 -0.5])
fuzzifiedIn =
0.3247 0.6065
0.3247 0.0111
0.0439 0.6065
0.0439 0.0111
ruleOut =
0.3247 0.0002 0.0002 0.0000
0.3247 0.0003 0.0003 0.0000
0.3247 0.0005 0.0005 0.0000
0.3247 0.0006 0.0006 0.0000
0.3247 0.0009 0.0009 0.0000
0.3247 0.0012 0.0012 0.0000
0.3247 0.0016 0.0016 0.0000
0.3247 0.0021 0.0021 0.0000
0.3247 0.0028 0.0028 0.0000
0.3247 0.0037 0.0037 0.0000
aggregatedOut =
0.3247
0.3247
0.3247
0.3247
0.3247
0.3247
0.3247
0.3247
0.3247
0.3247
ruleFiring =
0.3247
0.0111
0.0439
0.0111
outputRange = linspace(fis.output.range(1), fis.output.range(2), length(aggregatedOut))';
plot(outputRange, aggregatedOut, [output output], [0 1]), grid on
ylabel('Output Membership')
legend('Aggregated output fuzzy set', 'Defuzzified output')