⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 anfsedit.m

📁 模糊控制工具箱,很好用的,有相应的说明文件,希望对大家有用!
💻 M
📖 第 1 页 / 共 2 页
字号:
function anfisedit(action);
% anfisedit  Make anfis interface.
%

%   Kelly Liu, Dec. 96
%   Copyright 1994-2001 The MathWorks, Inc. 
%   $Revision: 1.9 $  $Date: 2001/09/11 12:51:00 $

if nargin<1,
   % Open up an untitled system.
   newFis=newfis('Untitled', 'sugeno');
   newFis=addvar(newFis,'input','input1',[0 1],'init');
   newFis=addvar(newFis,'output','output1',[0 1],'init');
   action=newFis;
end

if isstr(action),
   if action(1)~='#',
      % The string "action" is not a switch for this function, 
      % so it must be a disk file
      fis=readfis(action);
      fis.inNum=length(fis.input);
      fis.outNum=length(fis.output);
      action='#initialize';
   end
else
   % For initialization, the fis matrix is passed in as the parameter
   fis=action;
   action='#initialize';
end;

if strcmp(action,'#initialize'),
   for i=1:length(fis.input)
      numInputMFs(i)=length(fis.input(i).mf);
   end
   totalInputMFs=sum(numInputMFs);
   fisnodenum=length(fis.input)+2*totalInputMFs+2*length(fis.rule)+2+1;
   infoStr=['Number of nodes: ' num2str(fisnodenum)];
   
   fisName=fis.name;
   nameStr=['ANFIS TRAINING: ' fisName];
   figNumber=figure( ...
      'Name',nameStr, ...
      'Units', 'pixels', ...
      'NumberTitle','off', ...
      'MenuBar','none', ...
      'NumberTitle','off', ...
      'Tag', 'anfisedit',...
      'Userdata', fis,...
      'Visible','off');
   %        'Position', [232 118 560 420],...
   %======= create the menus standard to every GUI
   fisgui #initialize
   
   editHndl=findobj(figNumber,'Type','uimenu','Tag','editmenu');
   uimenu(editHndl,'Label','Undo', ...
      'Enable','off');
   
   axes( ...
      'Units','normalized', ...
      'Position',[0.10 0.55 0.65 0.415]);
   
   %===================================    
   left=0.03;
   right=0.75;
   bottom=0.05;
   labelHt=0.03;
   spacing=0.005;
   frmBorder=0.012;
   %======Set up the text Window==========
   top=0.5;    
   % First, the Text Window frame 
   frmPos=[.031 .115 .40 .361];
   frmHandle=LocalBuildFrmTxt(frmPos, '', 'frame', ''); 
   frmPos=[.449 .115 .52 .361];
   frmHandle=LocalBuildFrmTxt(frmPos, '', 'frame', ''); 
   frmPos=[.031 .0218 .756 .073];
   frmHandle=LocalBuildFrmTxt(frmPos, '', 'frame', ''); 
   % Then the text label
   left=.052;
   labelPos=[left .431 .360 .030];    
   lableHndl=LocalBuildFrmTxt(labelPos, 'ANFIS Information', 'text', 'lable2');
   % Then the editable text field
   mcwPos=[left .141 .361 .276]; 
   textHndl=LocalBuildUi(mcwPos, 'text', 'anfisedit #changetext', infoStr, 'Comments');
   
   %========Set up the Command Text Window ==================     
   % The text label
   labelPos=[.481 .417 .275 .042];    
   lableHndl=LocalBuildFrmTxt(labelPos, 'data from workspace', 'text', 'lable2');
   left=.464;
   width=.126;
   height=.046;
   left1=.609;
   width1=.144;
   height1=.046;
   labelPos=[left .325 width height];    
   mcwPos=[left1 .325 width1 height1];
   lableHandle=LocalBuildFrmTxt(labelPos, 'trndatin', 'text', 'lable1');
   % Then the editable text field
   
   mcwHndl=LocalBuildUi(mcwPos, 'edit', 'anfisedit #trndatin', '', 'trndatin');
   set(mcwHndl, 'Max', 1);
   % ========trndtout
   labelPos=[left .266 width height];    
   mcwPos=[left1 .266 width1 height1];
   lableHandle=LocalBuildFrmTxt(labelPos, 'trndatout', 'text', 'lable1');
   % Then the editable text field
   
   mcwHndl=LocalBuildUi(mcwPos, 'edit', 'anfisedit #trndatout', '', 'trndatout');
   set(mcwHndl, 'Max', 1);
   
   % ========chkdatin
   labelPos=[left .206 width height];    
   mcwPos=[left1 .206 width1 height1];
   lableHandle=LocalBuildFrmTxt(labelPos, 'chkdatout', 'text', 'lable1');
   % Then the editable text field
   mcwHndl=LocalBuildUi(mcwPos, 'edit', 'anfisedit #chkdatin', '', 'chkdatin');
   set(mcwHndl, 'Max', 1);
   
   % ========chkdtout
   labelPos=[left .143 width height];    
   mcwPos=[left1 .143 width1 height1];
   lableHandle=LocalBuildFrmTxt(labelPos, 'chkdatout', 'text', 'lable1');
   % Then the editable text field
   mcwHndl=LocalBuildUi(mcwPos, 'edit', 'anfisedit #chkdatout', '', 'chkdatout');
   set(mcwHndl, 'Max', 1);
   
   %========Set up the Status Window ==================     
   
   % Then the status text field
   mcwPos=[0.0491071428571429 0.0376984126984127 0.705357142857143 0.040];
   mcwHndl=LocalBuildUi(mcwPos, 'text', '', '', 'status');
   
   %====================================
   % Information for all buttons    
   left=0.80;
   btnWid=0.15;
   top=.55;
   
   %=========The Panel frame============
   frmBorder=0.02;
   frmPos=[left-frmBorder .524 btnWid+2*frmBorder .446];
   frmHandle=LocalBuildFrmTxt(frmPos, '', 'frame', '');
   
   %=========The Error frame=============
   frmBorder=0.02;
   btnHt=0.03;
   yPos=top+.31;
   btnPos=[0.78125 0.38492 0.15029 0.035];
   slideHandle=LocalBuildFrmTxt(btnPos, 'Error Limit', 'text', 'slide');
   %=========The Epoch frame=============
   yPos=top+.22;
   btnPos=[0.787202380952381 0.246031746031746 0.150297619047619 0.0376984126984127];
   slideHandle=LocalBuildFrmTxt(btnPos, 'Epochs', 'text', 'slide');
   %=========The tst frame=============
   yPos=top-.23;
   btnPos=[0.802083333333333 0.595 0.150297619047619 0.0297619047619048];
   slideHandle=LocalBuildFrmTxt(btnPos, 'Test', 'text', 'slide');
   %======Error Lim edit===================
   mcwPos=[0.785714285714286 0.30952380952381 0.150297619047619 0.0615079365079365];
   backHndl=LocalBuildUi(mcwPos, 'edit', 'anfisedit #errorlim','0',  'errlim');
   
   %======The epoch edit==============
   
   mcwPos=[0.790178571428571 0.16468253968254 0.150297619047619 0.0595238095238095];
   LocalBuildUi(mcwPos, 'edit', 'anfisedit #reset', '3',  'epoch');
   
   %=========The Start button============
   callbackStr='anfisedit #start';  
   nextHndl=LocalBuildBtns('pushbutton', 3, 'Start', callbackStr, 'startbtn');
   
   %======The Genfis button================
   newHndl=LocalBuildBtns('popupmenu', 2, {'grid genfis', 'cluster genfis'}, 'anfisedit #genfis', 'genfis');
   
   %======The New fis button=============
   delHndl=LocalBuildBtns('pushbutton', 4, 'FIS Struc.', 'anfisedit #plotstruc', 'plotstrc');
   
   %=======The Open Training set button==============
   addHndl=LocalBuildBtns('pushbutton', 1, 'OpenTrn...', 'anfisedit #opentrn', 'opentrn');
   
   %=======The Open test button==============
   %   saveHndl=LocalBuildBtns('pushbutton', 7, 'OpenTest...', 'anfisedit #opentst', 'opentst');
   
   %=======The Test button==============
   infoHndl=LocalBuildBtns('popupmenu', 5, {'Training', 'Testing'}, 'anfisedit #test', 'test');
   
   %=======The Close button=============
   closeHndl=LocalBuildBtns('pushbutton', 0, 'Close', 'fisgui #close', 'close');
   
   %====================================
   % The MENUBAR items
   % First create the menus standard to every GUI
   % Now uncover the figure
   set(figNumber,'Visible','on');
   LocalEnableBtns(fis);   
elseif strcmp(action,'#update'),
   %====================================
   figNumber=watchon;
   fis=get(figNumber,'UserData');
   % Clear the current variable plots and redisplay
   textHndl=findobj(gcf, 'Tag', 'Comments');
   %textstr=get(textHndl, 'String');
   textstr={['input number: ' num2str(length(fis.input)) 'output number: ' ...
            num2str(length(fis.output)) 'input mfs: ' num2str(getfis(fis, 'inmfs'))]};
   textstr={['input mfs: ' num2str(getfis(fis, 'inmfs'))]};
   set(textHndl, 'String', textstr);
   watchoff;
   %========start to train anfis==============
elseif strcmp(action,'#start'),
   fis=get(gcf, 'UserData');
   %  fis=fis(1);
   if ~isfield(fis, 'trndata')| isempty(fis.trndata(1))
      msgbox('no training data yet');
   elseif isempty(fis.input(1).mf)
      msgbox('No membership functions! Use mf editor or genfis button to generate membership functions');
   elseif ~isfield(fis, 'rule') | isempty(fis.rule)
      msgbox('No rules yet! Use rule editor or genfis button to generate rules.');
   else
      if isfield(fis, 'tstdata')
         testdata=fis.tstdata;
      else
         testdata=[];
      end
      cla;
      EpochHndl=findobj(gcf, 'Tag', 'epoch');
      numEpochs=str2double(get(EpochHndl, 'String'));
      if isempty(numEpochs)
         numEpochs=0;
      end
      txtHndl=findobj(gcf, 'Tag', 'status');
      stopHndl=findobj(gcf, 'Tag', 'startbtn');
      stopflag=get(stopHndl, 'String');
      if strcmp(stopflag, 'Start')
         set(stopHndl, 'String', 'Stop');
         errHndl=findobj(gcf, 'Tag', 'errline');
         errLimHndl=findobj(gcf, 'Tag', 'errlim');
         errlim=str2double(get(errLimHndl, 'String'));
         if isempty(errlim)
            errlim=0;
         end
         if isempty(errHndl)|length(get(errHndl, 'Xdata'))~=numEpochs
            if length(get(errHndl, 'Xdata'))~=numEpochs
               delete(errHndl)
            end
            errHndl=line([1:numEpochs], [1:numEpochs], 'linestyle', 'none',...
               'marker', '*', 'Tag', 'errline');
         end
         errvector=zeros(numEpochs,1);
      else
         set(stopHndl, 'String', 'Start');
      end
      fismat1=fis;
      if strcmp(stopflag, 'Start')
         for i=1:numEpochs
            [fismat1, trn_err]=anfis(fis.trndata, fismat1, 2, NaN, testdata, errHndl, stopHndl);
            errvector(i)=trn_err(1);
            set(errHndl, 'Ydata', errvector);
            drawnow
            txtStr={['Epoch ' num2str(i) ':error= ' num2str(trn_err(1))]};
            set(txtHndl, 'String', txtStr);
            stopflag=get(stopHndl, 'String');
            if strcmp(stopflag, 'Start')| trn_err(1)<=errlim
               break;
            end
         end   %end of if Satrt
         set(stopHndl, 'String', 'Start');
      end     % end of for loop
      fismat1.trndata=fis.trndata;
      if isfield(fis, 'tst.dat');
         fismat1.tstdata=fis.tstdata;
      end 
      %     newfis(1)=fismat1;
      %     newfis(2)=fis;
      
      set(gcf, 'UserData', fismat1);
      figNumber=watchon;
      updtfis(figNumber,fismat1,[6]);
      watchoff;
   end
   %========take training input data from commandline workspace
elseif strcmp(action,'#trndatin'),
   fis=get(gcf, 'UserData');
   trndatinHndl=findobj(gcf, 'Tag', 'trndatin');
   trndatinTxt=get(trndatinHndl, 'String');
   trnData=[];
   trnData=evalin('base', trndatinTxt, '[]');
   if isempty(trnData),
      msgbox('No such variable (or variable is empty)')
   else
      fis.trndata(:,1:length(fis.input))=trnData
   end   
   %========take training output data from commandline workspace
elseif strcmp(action,'#trndatout'),
   fis=get(gcf, 'UserData');
   trndatinHndl=findobj(gcf, 'Tag', 'trndatout');
   trndatinTxt=get(trndatinHndl, 'String');
   trnData=[];
   trnData=evalin('base', trndatinTxt, '[]');
   if isempty(trnData)
      msgbox(['no such variable ' trndatinTxt ' in workspace']);
   else   
      fis.trndata(:,length(fis.input)+1)=trnData
   end   
   %=======Auto generate anfis with gbell mf=====
elseif strcmp(action,'#genfis'),
   figNumber=gcf;
   fis=get(gcf,'UserData'); 
   if ~isfield(fis, 'trndata');
      msgbox('No Training Data for automatically generate fis membership functions');
   else
      trnData=fis.trndata;
      genHndl=findobj(figNumber, 'Tag', 'genfis');
      n=get(genHndl, 'Value');
      
      if n==1
         mfType=getfis(fis, 'inmftypes');
         
         param=inputdlg({'input mfs:'});
         
         inmflist=str2double(char(param));
         if ~isempty(inmflist)&length(inmflist)~=length(fis.input)
            inmflist(end+1:length(fis.input))=inmflist(end);
         end
         %mfType=questdlg('Mf type?', ...
         %                  'selece mf type', ...
         %                  'trimf','gbellm','gauss','trim');
         %%      figNumber=watchon;
         %%      dlgHndl=gfmfdlg(figNumber, fis, 'input', 1);
         %%      waitfor(dlgHndl)
         %%       watchoff(figNumber);
         if isempty(inmflist)
            inmflist=[2];
         end
         if isempty(mfType)|( size(mfType, 1)~=1 & size(mfType,1)~=size(fis.trndata,2)-1)
            mfType='gbellmf';
         end
         mfType

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -