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

📄 mobitps3.m

📁 Euclidean节点定位是由美国路特葛斯大学利用距离矢量路由和GPS定位原理提供出一种分布式自主定位算法
💻 M
字号:
%##################################################%%  RFUSP%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%parametersclear;DX=100;DY=100;DZ=100;nodeNumber=1000;comR=15;anchorN=2;derror=1;lim=1e-1;cur=1000;%DX*(1-derror);len=sqrt(DX^2+DY^2+DZ^2);cur=1000;perror=0.9;optR=sqrt((DX*DY/nodeNumber))/sqrt(2);V=1500;dmax=DZ;n=100;%anchorN=anchorN+1;ra=zeros(1,6);merr=zeros(1,6);serr=zeros(1,6);er=zeros(1,6);move=0;for tt=1:6    tt derror=(tt-1)/10.0+1;  ratio=0;  outR=0;  sigma1=sqrt((tt-1)/5);  %sigma1=0.05; %test1=0;  myerror=0;  serror=0;  err=0;for m=1:100    m%%%%%%%%%init%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Countanchor=0;flag=1;for i=1:nodeNumber   dx=rand(1,1)*(DX);   while dx<=5||dx>=DX-5        dx=rand(1,1)*(DX);   end  dy=rand(1,1)*(DY);  while dy<=5||dy>=DY-5        dy=rand(1,1)*(DY);   end   dz=rand(1,1)*(DZ);   while dz==0||dz==DZ        dz=rand(1,1)*(DZ);   end    node(i).ID=i;   if(Countanchor<anchorN)     node(i).type=0; % 0 is anchor,1 is normal;    Countanchor=Countanchor+1;   else       node(i).type=1;       end   node(i).tPosition.x=dx;   node(i).tPosition.y=dy;   node(i).tPosition.z=dz;     if node(i).type==0	%    switch flag        case 1     node(i).tPosition.x=dx;     node(i).tPosition.y=0;     flag=2;        case 2      node(i).tPosition.y=dy;      node(i).tPosition.x=0;         flag=3;        case 3     node(i).tPosition.x=dx;     node(i).tPosition.y=DY;     flag=4;        case 4       node(i).tPosition.y=dy;     node(i).tPosition.x=DX;      flag=1;    end              %}     node(i).ePosition.x= node(i).tPosition.x;    node(i).ePosition.y= node(i).tPosition.y;    node(i).ePosition.z= node(i).tPosition.z;    node(i).tPosition.z=0;	node(i).finish=1;    % hold on;   % plot(node(i).tPosition.x,node(i).tPosition.y,'r*');   else     node(i).ePosition.x=-1;     node(i).ePosition.y=-1;     node(i).ePosition.z=-1;     node(i).finish=0;     end   node(i).Heigh=node(i).tPosition.z;   node(i).test=0;   node(i).res=0;endnode(1).tPosition.x=0;node(1).tPosition.y=0;node(1).ePosition.x= node(1).tPosition.x;node(1).ePosition.y= node(1).tPosition.y; node(2).tPosition.x=0;node(2).tPosition.y=DY;node(2).ePosition.x= node(2).tPosition.x;node(2).ePosition.y= node(2).tPosition.y;%{%%%%%%%plot the node%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%	for i=1:nodeNumber if(node(i).type==0)     plot3(node(i).tPosition.x,node(i).tPosition.y,node(i).tPosition.z,'r*'); else    plot3(node(i).tPosition.x,node(i).tPosition.y,node(i).tPosition.z,'+'); end hold on;end grid on;%%%%%%%%%%%%%%%%%%topoly establishment%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%}%{connectivity=0; for i=1:nodeNumber    k=0;    nodeA=node(i);     for j=1:nodeNumber         nodeB=node(j);         H=abs(nodeA.Heigh-nodeB.Heigh);       if((j~=i)&& dst(nodeA,nodeB)<=comR && H<comR)         k=k+1;           neighbor(i).near(k)=j;          end     end      node(i).neighbors=k;      connectivity=connectivity+k; endconnect=0; for i=1:nodeNumber     if node(i).neighbors==0         connect=connect+1;         node(i).finish=-1;       i;     end end connect connectivity=connectivity/nodeNumber%}%{%%%%%%%%%%%%%%%%%plot 3Dtopo%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%for i=1:nodeNumber    A=node(i);    for j=1:node(i).neighbors       B=node(neighbor(i).near(j));        plotneighbor(A,B);        %plotplane(A,B);    endend%}judge=zeros(anchorN,anchorN);dx=0;dy=DY;step=1;while move<3 if dx<DX     dx=dx+step;    ll=1; else     dx=DX;     ll=2;     dy=dy-step; end  if dy<=0     break;     end%{while dx<=100%} node(2).tPosition.x=dx; node(2).tPosition.y=dy;for i=1:anchorN    for j=1:anchorN        if(i~=j)            judge(i,j)=pdst(node(i),node(j));        end    end    if ll==1 k1=node(2).tPosition.y/(node(2).tPosition.x+step/2);k2=node(2).tPosition.y/(node(2).tPosition.x-step/2);    end if ll==2 k1=(node(2).tPosition.y+step/2)/(node(2).tPosition.x);k2=(node(2).tPosition.y-step/2)/(node(2).tPosition.x);    end   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%for i=3:nodeNumber    xt=node(i).tPosition.x;    yt=node(i).tPosition.y;     y1=k1*xt;     y2=k2*xt;      if ll==1        filter=(yt>=y1&&yt<=y2);      else         filter=(yt<=y1&&yt>=y2);      end           if (node(i).type~=0) && (node(i).finish==0) && filter       A=node(1);       B=node(2);       S=node(i);       dd=zeros(1,anchorN);     %  [dd(1) dd(2)]=Tps(A,B,S,V,n,dmax);       if dd(1)==-1&&dd(2)==-1           continue;       end        for j=1:anchorN          dd(j)=dst(node(i),node(j));          e=normrnd(0,sigma1^.5,1,1);          dd(j)=dd(j)*(1+e);          %dd(j);          H=abs(node(i).Heigh-node(j).Heigh);          r(j)=sqrt(dd(j)^2-H^2);        end      a1=-1;      a2=-1;      x=0;y=0;      tx=0;ty=0;      found=0;         for k=1:anchorN-1          for j=k+1:anchorN             if(k~=j)               d1=r(k)+r(j);               d2=abs(r(k)-r(j));               ca1=judge(k,j)/d1;                ca2=judge(k,j)/d2;                                if ca1>=1||ca2>=1                     a1=k;a2=j;                      node(i).test=max([a1 a2]);                      x1=node(a1).tPosition.x;                      y1=node(a1).tPosition.y;                      x2=node(a2).tPosition.x;                     y2=node(a2).tPosition.y;                  % if x1~=x2 || y1~=y2                     found=1;                    break;                   %end                 end             end          end          if found==1              break;          end                   end         if found==1       r1=r(a1);       r2=r(a2);      % [node(i).ePosition.x,node(i).ePosition.y]=mypoint(x1,y1,x2,y2,r1,r2);        [x,y]=cal(x1,y1,x2,y2,r1,r2);        node(i).ePosition.z=node(i).tPosition.z;      %{        while y>DY       y=DY-(y-DY);       y=abs(y);       end    if y>DY           i    end        %}       node(i).ePosition.x=x;       node(i).ePosition.y=y;        node(i).finish=1;       res=0;         for j=1:anchorN          d=dd(j);            res=res+abs(edst(node(i),node(j))-d);       end       node(i).res=res/2;       node(i).err=(edst(node(i),node(i)))^2;                    end        endendendend%%%%%%%%%%%%%count%%%%%%%%%%%%%%%%%%%%%%%%%   myerror1=0;   err1=0;  locait=0;   for i=1:nodeNumber    if (node(i).type==1 && node(i).finish~=0)              %test1=test1+node(i).test;              myd=node(i).err;         if myd<cur         locait=locait+1;         err1=err1+node(i).res;        myerror1=myerror1+myd;       else         node(i).finish=3;         outR=outR+1;       end    end  end  ratio=ratio+locait/(nodeNumber-anchorN);  % test=test+test1/locait; myerror=myerror+myerror1/locait; serror=serror+sqrt(myerror1/locait);  err=err+err1/locait;endra(tt)=ratio/m;merr(tt)=myerror/m;serr(tt)=serror/m;er(tt)=err/m;endsave datastep1simga0_0.05.dat ra merr serr er  -ascii  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%{  %%%%%%%%%%%%%refine %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% for i=2:nodeNumber   if node(i).finish~=0   myres=node(i).res;    minres=myres;    reID=-1;   for j=2:nodeNumber       if (i~=j&&node(j).finish~=0)         dd=dst(node(i),node(j));         res=node(j).res;       if dd<=comR && res<minres           reID=j;           reD=dd;           minres=res;       end                  end   end   if reID~=-1&&node(i).finish~=0   testd=eedst(node(i),node(reID));   cost=abs(testd-reD);   go=cost+lim;   dy=node(i).ePosition.y;   step=minres/5;   dy=dy+step;   node(i).ePosition.y=dy;   testd=eedst(node(i),node(reID));   if abs(testd-reD)<cost       flag=1;   else        flag=-1;   end   dy=dy-step;    node(i).ePosition.y=dy;   while cost>lim && cost<go     node(i).ePosition.y=dy;       testd=eedst(node(i),node(reID));     go=cost;     cost=abs(testd-reD);    dy=dy+flag*step;   end   end end end %%%%%%%%%%%%%%count%%%%%%%%%%%%%%%%%%%%%%%%% outR=0;  locait=0;  test1=0;  myerror1=0;  err=0;  for i=1:nodeNumber    if (node(i).type==1 && node(i).finish~=0)         myd=edst(node(i),node(i));           test1=test1+node(i).test;         if myd<cur         locait=locait+1;         err=err+node(i).err;        myerror1=myerror1+myd;       else         node(i).finish=3;         outR=outR+1;       end    end  end  ratio=locait/(nodeNumber-anchorN)  test=test1/locait;myerror=myerror1/locait  outR;  err=err/locait  %} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%plot %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %{for i=1:nodeNumber if(node(i).type==0)     plot3(node(i).tPosition.x,node(i).tPosition.y,node(i).tPosition.z,'^'); else    if(node(i).finish==1||node(i).finish==2)    plot3(node(i).tPosition.x,node(i).tPosition.y,node(i).tPosition.z,'o');    ploterr(node(i),node(i));    plot3(node(i).ePosition.x,node(i).ePosition.y,node(i).ePosition.z,'r*');    else     plot3(node(i).tPosition.x,node(i).tPosition.y,node(i).tPosition.z,'kx');        end end hold on;end grid on;%}%{for i=1:anchorN    A=node(i);    for j=1:anchorN       B=node(j);        plotplane(A,B);endend%}

⌨️ 快捷键说明

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