have a issue with scalar
Show older comments
i am having a issue with the plot mf function within creating my fuzzy ifnerence system when trying to plot the mf using the graph function i recieve the error expected input index to be scalar with value <=2 and or <=1 this can be seen below in my code generation
> fis = mamfis('Name', "Diabetes");
fis = addInput(fis,[0 30], 'Name',"Glucose");
fis = addmf(fis,"Glucose","trimf",[0 5 10],'Name',"low");
fis = addmf(fis,"Glucose","trimf",[10 15 20],'Name',"medium");
fis = addmf(fis,"Glucose","trimf",[20 25 30],'Name',"High");
fis = addInput(fis,[0 30],'Name',"BMI");
fis = addmf(fis,"BMI","trimf",[0 5 10],'Name',"low");
fis = addmf(fis,"BMI","trimf",[10 15 20],'Name',"medium");
fis = addmf(fis,"BMI","trimf",[20 25 30],'Name',"High");
fis = addOutput(fis,[0 1],'Name',"Diabetes");
fis = addmf(fis,"Diabetes","trimf",[0 0.2 0.4],'Name',"NoDiabetes");
fis = addmf(fis,"Diabetes","trimf",[0.5 0.6 0.7],'Name',"HasDiabetes");
RuleList = [1 2 1 1 1;
2 1 1 1 1;
3 3 2 1 1;
]
fis = addRule(fis,RuleList)
RuleList =
1 2 1 1 1
2 1 1 1 1
3 3 2 1 1
fis =
mamfis with properties:
Name: "Diabetes"
AndMethod: "min"
OrMethod: "max"
ImplicationMethod: "min"
AggregationMethod: "max"
DefuzzificationMethod: "centroid"
Inputs: [1×2 fisvar]
Outputs: [1×1 fisvar]
Rules: [1×3 fisrule]
DisableStructuralChecks: 0
See 'getTunableSettings' method for parameter optimization.
>> plotmf(fis,'input',1)
>> plotmf(fis,'input',2)
>> plotmf(fis,'input',3)
Error using plotmf (line 52)
Expected input index to be a scalar with value <= 2.
>> plotmf(fis,'output',2)
Error using plotmf (line 52)
Expected output index to be a scalar with value <= 1.
And when i use the code that the error generates i am not sure what to correct as i am very new to using MATLAB and gogoling the errors didnt seem to work
function varargout = plotmf(fis,varType,varIndex,numPts)
%PLOTMF Display all of the membership functions for a given variable.
% PLOTMF(fismat,varType,varIndex) plots all of the membership functions
% in the FIS called fismat associated with a given variable whose type
% (input or output) and index are respectively given by varType and
% varIndex. This function can also be used with the MATLAB function
% subplot.
%
% [xOut,yOut] = PLOTMF(fismat,varType,varIndex) returns the x and y data
% points associated with the membership functions without plotting them.
%
% [xOut,yOutUpper,yOutLower] = PLOTMF(fismat,varType,varIndex) returns
% the x and y data points associated with the upper and lower membership
% functions of a type-2 FIS called fismat without plotting them.
%
% PLOTMF(fismat,varType,varIndex,numPts) generates the same plot with
% exactly numPts points plotted along the curve.
%
% The varType input argument is specified by a character row vector or
% string scalar.
%
% For example:
%
% fis = mamfis;
% fis = addInput(fis,[0 10],'Name','service');
% fis = addMF(fis,'service','gaussmf',[1.5 0],'Name','poor');
% fis = addMF(fis,'service','gaussmf',[1.5 5],'Name','good');
% fis = addMF(fis,'service','gaussmf',[1.5 10],'Name','excellent');
% plotmf(fis,'input',1)
%
% See also EVALMF, PLOTFIS.
% Copyright 1994-2019 The MathWorks, Inc.
%====================================
narginchk(3,4)
fuzzy.internal.utility.validateFIS(fis)
if ~isa(fis,'FuzzyInferenceSystem')
warning(message('fuzzy:general:warnDeprecation_FISStructure'))
fis = convertfis(fis);
end
fuzzy.internal.utility.validCharOrString('Variable type',varType);
if varType~="input" && varType~="output"
error(message('fuzzy:general:errVariable_InvalidType'));
end
if varType=="output" && fis.type=="sugeno"
error(message('fuzzy:general:errPlotmf_SugenoOutputMF'));
end
validateattributes(...
varIndex, ...
{'numeric'}, ...
{'nonempty','scalar','real','positive','integer', ...
'<=',length(fis.(varType))}, ...
'', ...
[char(varType) ' index'] ...
)
if nargin<4
numPts = 181;
else
validateattributes(...
numPts, ...
{'numeric'}, ...
{'nonempty','scalar','real','finite','integer','>',1}, ...
'', ...
['number of points taken in ' char(varType) ' range'] ...
)
end
var = fis.(varType)(varIndex);
numMFs = length(var.mf);
if numMFs == 0
error(message("fuzzy:general:errFIS_MissingMFs",varType))
end
x = linspace(var.range(1),var.range(2),numPts)';
if nargout<1
plot(var.mf,x,'XLabel',var.Name)
else
varargout{1} = x(:,ones(numMFs,1));
if nargout > 1
[varargout{2:nargout}] = getMembershipValue(var.mf,x);
if numMFs > 1
for i = 2:nargout
varargout{i} = varargout{i}';
end
end
end
end
if anyone can help it would be much appreciated.
Accepted Answer
More Answers (0)
Categories
Find more on Fuzzy Inference System Modeling in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!