ʹÓò»Í¬Æ½¾ùÌø¾àµÄDV-HOP¸Ä½øËã·¨ ÏÂÔØ±¾ÎÄ

%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 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