📄 mfcreate.m
字号:
function [fismat] = mfcreate(fismat, vartype, name, num, mfType, range);
%MFCREATE Create membership functions and input/output variables.
%
% Currently only mfTypes trimf, trapmf and gaussmf are supported.
%
% For example:
%
% fismat = MFCREATE(fismat, 'input', 'level', 5, 'trimf', [-1 1])
%
% Inserts the input fuzzy set 'level' into fismatrix and creates
% 5 equally spaced/overlapped membership functions in range [-1,1].
% The outer ones will be changed to trapezoid MF's, the inner ones
% will be triangular MF's. (Output variables: all trimf)
%
% See also NEFCON, NEFINIT and the Fuzzy Toolbox function FUZZY.
% Author: Andreas Nuernberger, TU Braunschweig, August 1996; a.nuernberger@tu-bs.de
% contact: Ludger Merz, DASA-Airbus GmbH, Hamburg; ludger.merz@airbus.de
%#realonly
mbintscalar(num);
if nargin ~= 6,
error('Too many or too few input arguments!');
end
if num <= 1,
error('Error: Num <= 1!');
end
mfnames = ['ze ';...
'nepo ';...
'nezepo ';...
'nenzpzpo ';...
'nenmzepmpo ';...
'nenmnzpzpmpo ';...
'nenmnszepspmpo ';...
'nenmnsnzpzpspmpo ';...
'nbnenmnszepspmpopb ';...
'nbnenmnsnzpzpspmpopb ';...
'nbnenmnsnzzepzpspmpopb';...
];
if strcmp(mfType, 'trimf') & strcmp(vartype, 'input')
d = (range(2) - range(1)) / (num+1);
else
d = (range(2) - range(1)) / (num -1);
end
fismat = addvar(fismat, vartype, name, range);
varidx = getfidx(fismat, vartype, name);
for i=1:num,
if num > size(mfnames,1)
mfName = ['mf' int2str(i)];
else
mfName = mfnames(num,2*i-1:2*i);
end
mid = range(1) + ((i-1)/(num-1)) * (range(2) - range(1));
if strcmp(mfType, 'trimf') & strcmp(vartype, 'input')
mid = range(1) + (i/(num+1)) * (range(2) - range(1));
else
mid = range(1) + ((i-1)/(num-1)) * (range(2) - range(1));
end
if (i==1 | i==num) & strcmp(mfType, 'trimf') & strcmp(vartype, 'input')
if i == 1
fismat = addmf(fismat, vartype, varidx, mfName, 'trapmf', [(mid-2*d) (mid-d) (mid) (mid+d)]);
else
fismat = addmf(fismat, vartype, varidx, mfName, 'trapmf', [(mid-d) (mid) (mid+d) (mid+2*d)]);
end
elseif strcmp(mfType, 'trimf')
fismat = addmf(fismat, vartype, varidx, mfName, 'trimf', [(mid-d) mid (mid+d)]);
elseif strcmp(mfType, 'gaussmf')
fismat = addmf(fismat, vartype, varidx, mfName, 'gaussmf', [(d/2.35) mid]);
else
error('Unsupported mfType.');
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -