www.gusucode.com > 模糊控制工具箱 fuzzy logic toolbox源码程序 > fuzzy/fuzzy/setfis2.m
function out=setfis(fis,arg1,arg2,arg3,arg4,arg5,arg6) %SETFIS Set fuzzy inference system properties. % FIS2 = SETFIS(FIS1,'fisPropName',newPropValue) returns the FIS matrix % FIS2 which is identical to FIS1 except that the FIS property % corresponding to 'fisPropName' is set to newPropValue. % % FIS2 = SETFIS(FIS1,varType,varIndex,'varPropName',newPropValue) % returns FIS2, in which a property associated with the variable % specified by varType and varIndex has been set to a new value. % % FIS2 = SETFIS(FIS1,varType,varIndex,'mf',mfIndex, ... % 'mfPropName',newPropValue) returns FIS2, in which a property % associated with the membership function specified by varType, % varIndex, and mfIndex has been set to a new value. % % For example: % % a=newfis('tipper'); % a=addvar(a,'input','service',[0 10]); % a=addmf(a,'input',1,'poor','gaussmf',[1.5 0]); % a=addmf(a,'input',1,'excellent','gaussmf',[1.5 10]); % getfis(a) % a=setfis(a,'Name','tip_example'); % a=setfis(a,'DefuzzMethod','bisector'); % a=setfis(a,'input',1,'Name','quality'); % getfis(a) % % See also GETFIS. % Kelly Liu 4-30-96 % Copyright 1994-2002 The MathWorks, Inc. % $Revision: 1.8 $ $Date: 2002/04/14 22:22:24 $ numInputs=length(fis.input); numOutputs=length(fis.output); if nargin==1, indent=32*ones(1,8); fprintf(' Name\n'); fprintf(' Type\n'); fprintf(' AndMethod\n'); fprintf(' OrMethod\n'); fprintf(' ImpMethod\n'); fprintf(' AggMethod\n'); fprintf(' DefuzzMethod\n'); fprintf(' InMFParams\n'); fprintf(' OutMFParams\n'); fprintf(' RuleList\n'); elseif nargin==3, propName=lower(arg1); newVal=arg2; if strcmp(propName,'name'), fis.fisName=arg2; out=fis; elseif strcmp(propName,'type'), fis.fisType=arg2; out=fis; elseif strcmp(propName,'andmethod'), fis.andMethod=arg2; out=fis; elseif strcmp(propName,'ormethod'), fis.orMethod=arg2; out=fis; elseif strcmp(propName,'impmethod'), fis.impMethod=arg2; out=fis; elseif strcmp(propName,'aggmethod'), fis.affMethod=arg2; out=fis; elseif strcmp(propName,'defuzzmethod'), fis.defuzzMethod=arg2; out=fis; elseif strcmp(propName,'inlabels'), error('You may not set this property directly'); elseif strcmp(propName,'outlabels'), error('You may not set this property directly'); elseif strcmp(propName,'inmflabels'), error('You may not set this property directly'); elseif strcmp(propName,'outmflabels'), error('You may not set this property directly'); elseif strcmp(propName,'inrange'), error('You may not set this property directly'); elseif strcmp(propName,'outrange'), error('You may not set this property directly'); elseif strcmp(propName,'inmftypes'), error('You may not set this property directly'); elseif strcmp(propName,'outmftypes'), error('You may not set this property directly'); elseif strcmp(propName,'rulelist'), fis.ruleList=arg2; out=fis; else error(['There is no FIS system property called ', propName]); end % =============================================== % Handle VARIABLES % =============================================== elseif nargin==5, % Name assignment % =========================================== varType=lower(arg1); varIndex=arg2; varProp=lower(arg3); newVal=arg4; if strcmp(varType,'input'), if varIndex>numInputs, error(['There are not that many input variables.']); end if strcmp(varProp,'name'), fis.FSInput(arg2).name=arg4; out=fis; end if strcmp(varProp,'range'), fis.FSInput(arg2).range=arg4; out=fis; end if strcmp(varProp,'nummfs'), error('You may not set this property directly'); end if strcmp(varProp,'mflist'), error('You may not set this property directly'); end elseif strcmp(varType,'output'), % Range checking if varIndex>numOutputs, error(['There are not that many output variables.']); end if strcmp(varProp,'name'), fis.Output(arg2).name=arg4; out=fis; end if strcmp(varProp,'range'), fis.Output(arg2).range=arg4; out=fis; end if strcmp(varProp,'nummfs'), error('You may not set this property directly'); end if strcmp(varProp,'mflist'), error('You may not set this property directly'); end else disp(['Variable type must be either "input" or "output"']); end % =============================================== % Handle MEMBERSHIP FUNCTIONS % =============================================== elseif nargin==7, % Name assignment % =========================================== varType=lower(arg1); varIndex=arg2; MFIndex=arg4; MFProp=lower(arg5); newVal=arg6; if strcmp(varType,'input'), % Range checking % ======================================= if varIndex>numInputs, error(['There are not that many input variables.']); end if MFIndex>size(fis.FSInput(varIndex).MF, 2), errStr=['There are only ',int2str(size(fis.FSInput(varIndex).MF, 2)), ... ' MFs associated with that variable']; error(errStr) end if strcmp(MFProp,'name'), fis.FSInput(arg2).MF(arg4).MFLabel=arg6; out=fis; end if strcmp(MFProp,'type'), fis.FSInput(arg2).MF(arg4).MFType=arg6; out=fis; end if strcmp(MFProp,'params'), fis.FSInput(arg2).MF(arg4).MFParams=arg6; out=fis; end elseif strcmp(varType,'output'), % Range checking % ======================================= if varIndex>numOutput, error(['There are not that many output variables.']); end MFRowIndex=sum(numOutputMFs(1:(varIndex-1)))+MFIndex; if strcmp(MFProp,'name'), fis.Output(arg2).MF(arg4).MFLabel=arg6; out=fis; end if strcmp(MFProp,'type'), fis.Output(arg2).MF(arg4).MFType=arg6; out=fis; end if strcmp(MFProp,'params'), fisType=fis.Type; MFType=fis.Output(arg2).MF(arg4).MFType; if strcmp(fisType,'sugeno') & strcmp(MFType,'constant'), % Sugeno systems with constant output functions should only have % one parameter, and it should go in the numInputs+1 column arg6=[0 arg6]; end fis.Output(arg2).MF(arg4).MFParams=arg6; out=fis; end end end