% Nonlinear Mapping of sin function using matlab toolbox
% Singleton Fuzzifier (as it is always in this toolbox),
% Production Inference Engine
% TRIMF Membership Functions
% MOM Defuzzifier
clc;clear;close all
a=newfis('Sin Fcn','mamdani','min', 'max', 'prod', 'max', 'mom');
a.input(1).name='X';
a.input(2).name='Y';
a.input(1).range=[-1 1];
a.input(2).range=[-1 1];
a.output(1).name='Z';
a.output(1).range=[-2 3];
step=0.1;
N=(1-(-1))/step+1;
m=0;
for jj=1:N
ejm1=-1+step*(jj-1-1);
ej=-1+step*(jj-1);
ejp1=-1+step*(jj-1+1);
a.input(1).mf(jj).name=sprintf('mf%i',jj);
a.input(1).mf(jj).type='trimf';
a.input(1).mf(jj).params=[ejm1,ej,ejp1];
for ii=1:N
m=m+1;
eim1=-1+step*(ii-1-1);
ei=-1+step*(ii-1);
eip1=-1+step*(ii-1+1);
a.input(2).mf(ii).name=sprintf('mf%i',ii);
a.input(2).mf(ii).type='trimf';
a.input(2).mf(ii).params=[eim1,ei,eip1];
a.output(1).mf(m).name=sprintf('mfo%i',m);
a.output(1).mf(m).type='trimf';
a.output(1).mf(m).params=[sin(ej*pi)+cos(ei*pi)+sin(ej*pi)*cos(ei*pi)-0.1,sin(ej*pi)+cos(ei*pi)+sin(ej*pi)*cos(ei*pi),sin(ej*pi)+cos(ei*pi)+sin(ej*pi)*cos(ei*pi)+0.1];
plot3(ej, ei, sin(ej*pi)+cos(ei*pi)+sin(ej*pi)*cos(ei*pi), 'r*');
hold on;
end
end
s1=[];
for i=1:N
s1=[s1,ones(1,N)*i];
end
s=(1:N);
s2=[];
for i=1:N
s2=[s2,s];
end
si=[s1 ; s2];
ruleList=[si',(1:N*N)',ones(N*N,2),ones(N*N,1)];
a=addrule(a,ruleList);
gensurf(a)
fuzzy(a)