📄 mmdemo.m
字号:
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 + -