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

📄 relaxation.m

📁 best routing protocol
💻 M
字号:
function P = relaxation(X,d,op,stepsize)%function P = relaxation(X,d,stepsize)%function [P,P1] = relaxation(X,d,stepsize)% force-based relaxation algorithm (in [Pierce95])% embedding from a distance matrix X to a d-dimensional space% stepsize specifies the "small distance" to move in relaxation algorithm% MDS initialization if op==1, random if op==2  n = size(X,1);  P = zeros(n,d);  if op==1	% use MDS to initialize embedding    %[Y,e] = cmdscale(X);	% initial embedding in a p>=d-dimensional space    %P = Y(:,1:d);	% keep the first d dimensions    [P e] = mds(X, d);	% using mds function from Yun  elseif op==2	% random initialization    maxd = max(max(X));	% max distance    for i = 1:d      P(:,i) = maxd*(rand([n 1])-0.5);	% uniform random from [-maxd/2, maxd/2]    end  end  %X1 = squareform(pdist(P));	% new distance matrix from embedding P  X1 = euclidean_distance(P,P);	% new distance matrix from embedding P  iter = 0;  lasterror = Inf;  error = sum(sum((X1 - X).^2))/2;  while iter < 100 & error < lasterror	% there is some progress    F = cell(d,1);    G = (X1-X)./(X1+eye(n));	% avoid dividing by 0    for k = 1:d      Rrep = repmat(P(:,k)',n,1);	% row replication      Crep = repmat(P(:,k),1,n);	% column replication      F{k} = (Rrep - Crep).*G;	% force matrix at the k-th dimension    end    if stepsize <= 0      % stepsize adaptive to total error (not realistic, just for temporary use)      stepsize = sqrt(error)/100;    end    for k = 1:d      P(:,k) = P(:,k) + stepsize*sum(F{k},2);    end    %X1 = squareform(pdist(P));	% new distance matrix from embedding P    X1 = euclidean_distance(P,P);	% new distance matrix from embedding P    lasterror = error;    error = sum(sum((X1 - X).^2))/2;    iter = iter + 1;%{%    if iter == 1%      P1 = P;%    end%}  end%  fprintf(1,'%d iterations\n',iter);

⌨️ 快捷键说明

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