%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DV-HopËã·¨ ~~~~~~~~~~~~~~~~~~~~~~~~
%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
% BorderLength-----Õý·½ÐÎÇøÓòµÄ±ß³¤£¬µ¥Î»£ºm % NodeAmount-------ÍøÂç½ÚµãµÄ¸öÊý % BeaconAmount---Ðűê½ÚµãÊý
% Sxy--------------ÓÃÓÚ´æ´¢½ÚµãµÄÐòºÅ£¬ºá×ø±ê£¬×Ý×ø±êµÄ¾ØÕó ?acon----------Ðűê½Úµã×ø±ê¾ØÕó;BeaconAmount*BeaconAmount %UN-------------δ֪½Úµã×ø±ê¾ØÕó;2*UNAmount
% Distance------δ֪½Úµãµ½Ðűê½Úµã¾àÀë¾ØÕó;2*BeaconAmount %h---------------½Úµã¼ä³õÊ¼ÌøÊý¾ØÕó
%X---------------½Úµã¹À¼Æ×ø±ê³õʼ¾ØÕó,X=[x,y]'
% R------------------½ÚµãµÄͨОàÀ룬һ°ãΪ10-100m function AccuracyAve=DVHOP_dif_tiaoju(R) NodeAmount=100; BorderLength=100; for Z=1:19
Rate(Z)=(5*Z)/NodeAmount; BeaconAmount=5*Z;
UNAmount=NodeAmount-BeaconAmount;
h=zeros(NodeAmount,NodeAmount);%³õÊ¼ÌøÊýΪ0£»BeaconAmountÐÐNodeAmountÁÐ
X=zeros(2,UNAmount);%½Úµã¹À¼Æ×ø±ê³õʼ¾ØÕó loop=150;
BeaconAmount
for kk=1:loop %¶à´ÎÑ»·È¡Æ½¾ùÖµ£¬±ÜÃâżȻÎó²î
%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ÔÚÕý·½ÐÎÇøÓòÄÚ²úÉú¾ùÔÈ·Ö²¼µÄËæ»úÍØÆË~~~~~~~~~~~~~~~~~~~~
C=BorderLength.*rand(2,NodeAmount); %´øÂß¼ºÅµÄ½Úµã×ø±ê Sxy=[[1:NodeAmount];C];
Beacon=[Sxy(2,1:BeaconAmount);Sxy(3,1:BeaconAmount)];%Ðűê½Úµã×ø±ê
UN=[Sxy(2,(BeaconAmount+1):NodeAmount);Sxy(3,(BeaconAmount+1):NodeAmount)];%δ֪½Úµã×ø±ê
%~~~~~~~~~~~~~~~~~~~~~~~~~~~~³õʼ»¯½Úµã¼ä¾àÀë¡¢ÌøÊý¾ØÕó~~~~~~~~~~~~~~~~~~~~~~ for i=1:NodeAmount for j=1:NodeAmount
Dall(i,j)=((Sxy(2,i)-Sxy(2,j))^2+(Sxy(3,i)-Sxy(3,j))^2)^0.5;%ËùÓнڵã¼äÏ໥¾àÀë
if (Dall(i,j)<=R)&(Dall(i,j)>0) h(i,j)=1;%³õÊ¼ÌøÊý¾ØÕó elseif i==j h(i,j)=0; else h(i,j)=inf; end end end
%~~~~~~~~~~~~~~~~~~~~~~~~~×î¶Ì·¾Ëã·¨¼ÆËã½Úµã¼äÌøÊý~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for k=1:NodeAmount for i=1:NodeAmount for j=1:NodeAmount
if h(i,k)+h(k,j) %~~~~~~~~~~~~~~~~~~~~~~~~~Çóÿ¸öÐűê½ÚµãµÄУÕýÖµ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ h1=h(1:BeaconAmount,1:BeaconAmount); D1=Dall(1:BeaconAmount,1:BeaconAmount); for i=1:BeaconAmount dhop(i,1)=sum(D1(i,:))/sum(h1(i,:));%ÿ¸öÐűê½ÚµãµÄƽ¾ùÃ¿Ìø¾àÀë end ¨°=Dall(1:BeaconAmount,(BeaconAmount+1):NodeAmount);?aconAmountÐÐUNAmountÁÐ %for i=1:BeaconAmount % for j=1:UNAmount % if min(D2(:,j))==D2(i,j) % Dhop(1,j)=dhop(i,1);%δ֪½Úµã´Ó×î½üµÄÐűê»ñµÃУÕýÖµ % end % end %end %Dhop %~~~~~~~~~~~~~~~~~~~~~~~~~~~ÓÃÌøÊý¹À¼Æ¾àÀë~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ hop1=h(1:BeaconAmount,(BeaconAmount+1):NodeAmount);%δ֪½Úµãµ½ÐűêÌøÊý£¬BeaconAmountÐÐUNAmountÁÐ Distance=zeros(BeaconAmount,UNAmount); %²»³õʼ»¯µÄ»°ËûĬÈϵÚÒ»´ÎÑ»·µÄʱºòµÄÐÐÁÐÊý£¬µÈµ½ºóÃæÖ´Ðе½´Ë´¦»á³ö´í %for i=1:UNAmount %hop=Dhop(1,i);%hopΪ´Ó×î½üÐűê»ñµÃµÄУÕýÖµ %Distance(:,i)=hop*hop1(:,i);%?aconÐÐUNÁУ» %end for i=1:BeaconAmount hop=dhop(i,1); for j=1:UNAmount Distance(i,j)=hop*hop1(i,j); %δ֪½Úµãµ½Ðűê½ÚµãµÄ¾àÀëÓÃÿ¸öÐűê½ÚµãµÄƽ¾ùÃ¿Ìø¾àÀë¼ÆËã end end % %~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~×îС¶þ³Ë·¨Çóδ֪µã×ø±ê~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ d=Distance; for i=1:2 for j=1:(BeaconAmount-1) a(i,j)=Beacon(i,j)-Beacon(i,BeaconAmount); end end A=-2*(a'); % d=d1'; for m=1:UNAmount for i=1:(BeaconAmount-1) B(i,1)=d(i,m)^2-d(BeaconAmount,m)^2-Beacon(1,i)^2+Beacon(1,BeaconAmount)^2-Beacon(2,i)^2+Beacon(2,BeaconAmount)^2; end X1=inv(A'*A)*A'*B; X(1,m)=X1(1,1); X(2,m)=X1(2,1); end UN; X; for i=1:UNAmount error(1,i)=(((X(1,i)-UN(1,i))^2+(X(2,i)-UN(2,i))^2)^0.5); end error=sum(error)/UNAmount; Accuracy(1,kk)=error/R; end AccuracyAve(Z)=sum(Accuracy)/loop end end