clc;
clear all;
%各节点的参数,包括:stratum值;time时间值;位置信息即坐标(x,y)
s1=[1, 12.1011, 0, 0]; s2=[2, 12.1122, 1, 1]; s3=[2, 12.1333, 2, 2];
s4=[3, 12.1134, 3, 3]; s5=[3, 12.1245, 4, 4]; s6=[3, 12.1456, 5, 5];
stratum = [s1(1),s2(1),s3(1),s4(1),s5(1),s6(1)];
time = [s1(2),s2(2),s3(2),s4(2),s5(2),s6(2)];
x = [s1(3),s2(3),s3(3),s4(3),s5(3),s6(3)];
y = [s1(4),s2(4),s3(4),s4(4),s5(4),s6(4)];
%连接矩阵:0表示本身;inf表示不连接,不通信
connection = [0 1 1 inf inf inf; 1 0 1 1 1 1; 1 1 0 inf inf 1;
inf 1 inf 0 1 inf; inf 1 inf 1 0 inf; inf 1 1 inf inf 0];
%从同步距离矩阵中操作,找出最优时间
for i=1:6
t1=[];%用于存储有连接的下标
k=0;
for j=1:6
if connection(i,j)==1
k=k+1;
t1(k)=j; %存储距离下标
end
end
t2=[]; %用于存储节点的stratum值比i节点的stratum值‘小’的节点下标
kk=0; %存储与i连接且stratum值比i的小的节点的个数
for n=1:k
if stratum(i) > stratum( t1(n) )
kk=kk+1;
t2(kk) = t1(n);%存储起有连接且stratum值比i节点stratum值‘小’的节点的下标
end
t3=[];%用于存储stratum间的差值,便于排序
for m=1:kk
t3(m)=stratum(i)-stratum(t2(m));
end
for aa=2:kk %循环用于找出最大差值,从而找到连接节点的最大stratum值
if t3(1)<t3(aa)
temp=t3(aa);
t3(aa)=t3(1);
t3(1)=temp;
end
end
kkk=0; %stratum值相等的节点数
t4=[]; %用于存储stratum值相等的节点的下标
for m=1:kk
if stratum(i)-stratum(t2(m))==t3(1);
kkk=kkk+1;
t4(kkk)=t2(m);%存储
end
if kkk>1
distance=[]; %存储同步距离值
order=[]; %排序求距离
%计算同步距离,取小的值
for bb=1:kkk
distance(bb) = sqrt ((x(i)-x(t4(bb)))*(x(i)-x(t4(bb)))+(y(i)-y(t4(bb)))*(y(i)-y(t4(bb))));
order(bb)=distance(bb); %将距离存入order数组,利用该数组求最小值
end
%求最小同步距离
for cc=1:kkk
for dd=2:kkk
if order(cc)>order(dd)
temp=order(dd);
order(dd)=order(cc);
order(cc)=temp;
end
end
end
ee=0;
for cc=1:kkk
if distance(cc)==order(1)
ee=ee+1;
end
end
if ee==1
time(i)=time(t4(cc)) ;
else
%此处添加当stratum值和同步距离都相同时的讨论情况
%
%
end
else
time(i)=time(t2(m));
end
end
end
%显示每次循环中变量的值
fprintf('与i连接的节点数')
k
fprintf('与i连接的节点')
t1
fprintf('stratum值比i节点的stratum值‘小’的节点数')
kk
fprintf('stratum值比i节点的stratum值‘小’的节点 ')
t2
fprintf('与i连接,stratum值比i的stratum值小的节点中,stratum值相等的节点数')
kkk
fprintf('与i连接,stratum值比i的stratum值小的节点中,stratum值相等的节点')
t4
fprintf('同步后时间')
time
end
%{
把改变后的时间值写入节点
s1(2)=time(1);
s2(2)=time(2);
s3(2)=time(3);
s4(2)=time(4);
s5(2)=time(5);
s6(2)=time(6);
显示各节点的数据
s1,s2,s3,s4,s5,s6
%}