📄 fastupdatemapxy.m
字号:
function [NewXMap,NewYMap] = FastUpdateMapXY(Xtr,XMap,Ytr,YMap,MLKP,iter);
[NvarX,Nunit]=size(XMap);
[NvarY,Nunit]=size(YMap);
[Nobjects,Dummy] = size(Xtr);
ZeroXMap=zeros(NvarX,Nunit);
ZeroYMap=zeros(NvarY,Nunit);
ZeroCount=zeros(Nunit,1);
Tstart=cputime;
[Alpha] = DetermineAlphaValues(MLKP);
disp('Entering fast map update mode');
ContinueUpdate='Y';
Iteration=0;
while (ContinueUpdate == 'Y')
Iteration=Iteration+1;
OldXMap=XMap;
OldYMap=YMap;
NewXMap=ZeroXMap;
NewYMap=ZeroYMap;
Count=ZeroCount;
for iobj=1:Nobjects
X=Xtr(iobj,:);
Y=Ytr(iobj,:);
if (MLKP.TrainingMethod == 'MLK' | MLKP.TrainingMethod =='CPN')
[Value, Winner] = DetermineWinner(X,XMap,MLKP.DistTypeX,MLKP);
else
[Value, Winner] = DetermineSimultaneousWinner(X,XMap,Y,YMap,MLKP,Alpha(iter));
end
NewXMap(:,Winner)= NewXMap(:,Winner)+X';
NewYMap(:,Winner)= NewYMap(:,Winner)+Y';
Count(Winner) = Count(Winner)+1;
end
for iunit=1:Nunit
if (Count(iunit) > 0)
NewXMap(:,iunit)=NewXMap(:,iunit)/Count(iunit);
NewYMap(:,iunit)=NewYMap(:,iunit)/Count(iunit);
else
NewXMap(:,iunit)=XMap(:,iunit);
NewYMap(:,iunit)=YMap(:,iunit);
end
end
if ((sum(sum(NewXMap-OldXMap))+sum(sum(NewYMap-OldYMap))) == 0)
Message=sprintf('Fast map update converged after %d iterations in %g seconds',...
Iteration,cputime-Tstart);
disp(Message);
ContinueUpdate ='N';
else
XMap=NewXMap;
YMap=NewYMap;
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -