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

📄 mmdemo.m

📁 四种支持向量机用于函数拟合与模式识别的Matlab示例程序
💻 M
📖 第 1 页 / 共 2 页
字号:
      h.plot1.time=[1];
      h.plot2.minps=[minp];
      h.plot1.topps=[topp];
   end


   % Play - adaptation process
   play=1;
   while play==1 & get(h.btstop,'UserData')==0,

      % perform one learning step
      [mi,sigma,solution,minp,topp,h.ellipse.N,h.ellipse.t]=...
         mmln(sets.X,epsilon,iter,h.ellipse.t,h.ellipse.N);

      text=sprintf('step number t=%d ',h.ellipse.t);
      if solution==1,
         text=strcat(text,',solution was found.');
         play=0;
      else
         % add new value to plot
         h.plot1.time=[h.plot1.time,h.ellipse.t];
         h.plot2.minps=[h.plot2.minps,minp];
         h.plot1.topps=[h.plot1.topps,topp];

         % is axis to be changed ?
         if h.ellipse.t > h.plot1.axist,
            h.plot1.axist=h.ellipse.t+iter*AXIST_ADD;
            set(h.aprob,'XLim',[1 h.plot1.axist]);
         end
         set(h.plot2.handler,'XData',h.plot1.time,'YData',h.plot2.minps,'Visible','on');
         set(h.plot1.handler,'XData',h.plot1.time,'YData',h.plot1.topps,'Visible','on');

         % erase old ellipse, compute and plot new one
         set(h.ellipse.center,'XData',mi(1),'YData',mi(2),'Visible','on');
         r=sqrt(max(mahalan(sets.X,mi,sigma)));
%%%         [x,y]=ellipse(inv(sigma),50,r,mi);
         [x,y]=ellips(mi,sigma,r,40);
         set(h.ellipse.handler,'XData',x,'YData',y,'Visible','on');
       end

      % comment
      set(h.txsteps,'String',text);

      % store data
      set(hfigure,'UserData',h);

      % flush it on desktop
      drawnow;
   end

   % disable button
   set([h.edeps,h.editer,h.btstep,h.btclose,h.btplay,...
        h.btreset,h.btinfo,h.btload,h.btcreat,h.txeps,h.txiter],...
      'Enable','on');
   % enable stop button
   set(h.btstop,'Enable','off');


case 'step'
   % == One step learning ==============================================
   h=get(hfigure,'UserData');

   % get data set
   sets=get(h.aset,'UserData');

   % are data sets loaded ?
   if isempty(sets)==1,
      return;
   end

   % get # of iter and epsilon
   iter=str2num(get(h.editer,'String'));
   epsilon=str2num(get(h.edeps,'String'));

   % start point for plot
   if h.ellipse.t==0 & iter > 1,
      [mi,sigma,solution,minp,topp]=mmln(sets.X,epsilon,1,0);
      h.plot1.time=[1];
      h.plot2.minps=[minp];
      h.plot1.topps=[topp];
   end

   % perform one learning step
   [mi,sigma,solution,minp,topp,h.ellipse.N,h.ellipse.t]=...
      mmln(sets.X,epsilon,iter,h.ellipse.t,h.ellipse.N);

   text=sprintf('step number t=%d ',h.ellipse.t);
   if solution==1,
      text=strcat(text,',solution was found.');
   else
      % add new value to plot
      h.plot1.time=[h.plot1.time,h.ellipse.t];
      h.plot2.minps=[h.plot2.minps,minp];
      h.plot1.topps=[h.plot1.topps,topp];

      % is axis to be changed ?
      if h.ellipse.t > h.plot1.axist,
         h.plot1.axist=h.ellipse.t+iter*AXIST_ADD;
         set(h.aprob,'XLim',[1 h.plot1.axist]);
      end
      set(h.plot2.handler,'XData',h.plot1.time,'YData',h.plot2.minps,'Visible','on');
      set(h.plot1.handler,'XData',h.plot1.time,'YData',h.plot1.topps,'Visible','on');

      % erase old ellipse, compute and plot new one
      set(h.ellipse.center,'XData',mi(1),'YData',mi(2),'Visible','on');
      r=sqrt(max(mahalan(sets.X,mi,sigma)));
%%%      [x,y]=ellipse(inv(sigma),50,r,mi);
      [x,y]=ellips(mi,sigma,r,40);
      set(h.ellipse.handler,'XData',x,'YData',y,'Visible','on');
   end

   % comment
   set(h.txsteps,'String',text);

   % flush it on desktop
   drawnow;

   set(hfigure,'UserData',h);


case 'redraw'
   % == Redraw contents of axes ====================================

   h=get(hfigure,'UserData');                   % uicontrol handlers

   % get sets with points
   sets=get(h.aset,'UserData');
   if isempty(sets)==1,
      return;
   end

   % clears axes
   axes(h.aset);
   set(get(h.aset,'Children'),'EraseMode','normal');
   %%%   cla;
   clrchild(h.aset);
   h.ellipse.handler=plot([0],[0],...
      'Parent',h.aset,'LineWidth',LINE_WIDTH,...
      'EraseMode','xor','Color','k','Visible','off');
   h.ellipse.center=line(0,0,'Marker','x',...
      'EraseMode','xor','Color','k','MarkerSize',CENTERSIZE,'Visible','off');

   win=cmpwin(min(sets.X'),max(sets.X'),BORDER,BORDER);
%%%   axis(win);
   setaxis(h.aset,win);
   axes(h.aset);

   % plot mixture
%%   pplot(sets.X,sets.I);
   ppoints(sets.X,sets.I);

   set(hfigure,'UserData',h);

case 'getfile'
   % == Invoke standard open file dialog ====================================
   % Opens file and checks if contains appropriate data, if yes than loads data.

   h=get(hfigure,'UserData');

   % change path to directory
%%   wres=what('minimax');
%%   cd(wres.path);

   [name,path]=uigetfile('*.mat','Open file');
   if name~=0,
      file.pathname=strcat(path,name);
      file.path=path;
      file.name=name;
      if checkdat(file.pathname,DATA_IDENT,2,[0])==1,
         set(h.btload,'UserData',file);
         mmdemo('loadsets',hfigure);
      else
         errordlg('This file does not contain required data.','Bad file','modal');
      end
   end


case 'loadsets'
   % == Load sets ==================================================================
   % Get file name from the pop up menu according to menu pointer.

   h=get(hfigure,'UserData');

   % Get file name with sets
   file=get(h.btload,'UserData');

   % Load sets
   sets=load(file.pathname);

   % store loaded sets
   set(h.aset,'UserData',sets);

   % call reset
   mmdemo('reset',hfigure);

   % call redraw
   mmdemo('redraw',hfigure);

   drawnow;


case 'reset'
   % == Reset adaptation process, set up t=0 ================

   h=get(hfigure,'UserData');                     % get handlers

   % get file
   file=get(h.btload,'UserData');

   % get data set
   sets=get(h.aset,'UserData');

   % zeroes parameters of the separation line
   h.ellipse.mi=[];
   h.ellipse.sigma=[];
   h.ellipse.t=0;
   h.ellipse.N=[];
   h.plot1.topps=[];
   h.plot2.minps=[];
   h.plot1.time=[];
   h.plot1.axist=0;

   % comment
   text=sprintf('step number t=0 ');
   set(h.txsteps,'String',text);

   % hide ellipse
   if h.ellipse.handler==-1,
      h.ellipse.handler=plot([0],[0],...
         'Parent',h.aset,'LineWidth',LINE_WIDTH,...
         'EraseMode','xor','Color','k','Visible','off');
      h.ellipse.center=line(0,0,'Marker','x',...
         'EraseMode','xor','Color','k','MarkerSize',CENTERSIZE,'Visible','off');
   else
      set(h.ellipse.handler,'Visible','off');
      set(h.ellipse.center,'Visible','off');
   end % if h.ellipse.handler~=-1

   % clear axes prob.
   axes(h.aprob);
   cla;
   axis auto;
   h.plot1.handler=plot([0],[0],'b','Parent',h.aprob,...
      'EraseMode','background','Visible','off');
   h.plot2.handler=plot([0],[0],'r','Parent',h.aprob,...
      'EraseMode','background','Visible','off');

   % set up handlers and flush queue with graph. objects
   set(hfigure,'UserData',h);

   % creat comment
   axes(h.aset);
   if isempty(sets)==0,
      set(h.title1,'String',sprintf('File: %s, # of points K = %d',file.name,sum(sets.K)));
   else
      set(h.title1,'String','No data loaded');

      pos=get(h.aset,'Position');
      fsize=min(pos(3),pos(4))/8;
      axis([-1 1 -1 1]);
      builtin('text',0,0,'Press ''Load data'' button.',...
         'HorizontalAlignment','center',...
         'FontUnits','normalized',...
         'Clipping','on',...
         'FontSize',fsize);
   end

   drawnow;

case 'creatdata'
   % == Invoke data set creator ============================================
   creatset('finite',1,'mmdemo','created',hfigure);

case 'created'
   % == Load new created data set ===========================================

   % get handler and make this figure active
   figure(hfigure);
   h=get(hfigure,'UserData');

   % get file name
   path=varargin{1};
   name=varargin{2};
   pathname=strcat(path,name);

   if checkdat(pathname,DATA_IDENT,2,[0])==1,
      file.pathname=pathname;
      file.path=path;
      file.name=name;
      set(h.btload,'UserData',file);
      mmdemo('loadsets',hfigure);
   else
      errordlg('This file does not contain required data.','Bad file','modal');
   end

case 'info'
   % == Call standard Matlab`s info box =========================================
   helpwin(mfilename);
end % switch

⌨️ 快捷键说明

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