MEX file that changes the consequent of a fuzzy model.
MATLAB help:
% MAT2CONSEQ Changes the consequent of a fuzzy model.
%
% Final_Model = mat2conseq(Initial_Model,Vector)
%
% Final_Model = mat2conseq(Initial_Model,Vector,Output,Rule)
%
% [Final_Model,length] = mat2conseq(Initial_Model,Vector)
%
% [Final_Model,length] = mat2conseq(Initial_Model,Vector,Output,Rule)
%
% Arguments:
%
% Final_Model -> Changed fuzzy model.
%
% Output -> Use to select the consequent of one output.
%
% Rule -> Use to select the consequent of one rule for given output.
%
% length -> The length of Vector, 0 if error.
%
% Initial_Model -> Fuzzy Model to change. This model could be a '.txt' file,
% a '.fis' file, or a 'FIS' variable from MATLAB Workspace.
%
% Vector -> Vector with data for fuzzy model consequent.
%
% See also activation, antec2mat, aproxjac, aproxlinear, conseq2mat, fis2txt,
% fuz2mat, fuzcomb, fuzeval, fuzjac, fuzlinear, fuzprint, mat2antec,
% mat2fuz, fuzsubsystem, txt2fis
Source code:
void mexFunction (int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
size_t i, n_con, out,rule;
double *data;
if(nrhs<2)
if (nrhs>2 && nrhs!=4)
if (nlhs>2)
if (mxIsEmpty(prhs[0]) || mxIsNaN(*mxGetPr(prhs[0])))
if (nrhs==4)
{
if (mxGetM(prhs[2])>1 || mxGetM(prhs[3])>1)
if (mxGetN(prhs[2])!=mxGetN(prhs[3]))
}
if (nlhs==2)
{
if (nrhs==2)
{
}
else
{
n_con = 0;
for (i=0;i<mxGetN(prhs[2]);i++)
{
out = ((size_t)*(mxGetPr(prhs[2])+i))-1;
rule = ((size_t)*(mxGetPr(prhs[3])+i))-1;
n_con += NoC;
}
}
if (!n_con)
}
data = mxGetPr(prhs[1]);
if (nrhs==2)
else
{
for (i=0;i<mxGetN(prhs[2]);i++)
{
out = ((size_t)*(mxGetPr(prhs[2])+i))-1;
rule = ((size_t)*(mxGetPr(prhs[3])+i))-1;
S.
readRule(out,rule)->setConsequents(data+NoC*i);
}
}
if (nlhs==2)
plhs[1] = mxCreateDoubleScalar(n_con);
const char* names[] = {"name","type","andMethod","orMethod","defuzzMethod","impMethod","aggMethod","input","output","rule"};
mwSize dim[] = {1,1};
plhs[0]= mxCreateStructArray(2,dim,10,names);
{
mxDestroyArray(plhs[0]);
}
}