📄 mobi.m
字号:
%##################################################%% RFUSP%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%parametersclear;DX=100;DY=100;DZ=100;nodeNumber=4500;comR=15;anchorN=2;derror=1;lim=1e-1;cur=1000;%DX*(1-derror);len=sqrt(DX^2+DY^2+DZ^2);cur=100;perror=0.9;optR=sqrt((DX*DY/nodeNumber))/sqrt(2);%anchorN=anchorN+1;ra=zeros(1,6);merr=zeros(1,6);er=zeros(1,6);for step=1:5 step %derror=(tt-1)/10.0+1; ratio=0; outR=0; %test1=0; myerror=0; err=0;for m=1:100 m%%%%%%%%%init%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Countanchor=0;flag=1;for i=1:nodeNumber dx=rand(1,1)*(DX); while dx==0||dx==DX dx=rand(1,1)*(DX); end dy=rand(1,1)*(DY); while dy==0||dy==DY 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=(DZ)-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;%step=1;%{while move<3 if dy~=DY dy=dy+1; else dy=DY; dx=dx-1; end if dx==0 break; end%}while dx<=100 node(1).tPosition.x=dx; node(2).tPosition.x=dx;for i=1:anchorN for j=1:anchorN if(i~=j) judge(i,j)=pdst(node(i),node(j)); end endend%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%for i=3:nodeNumber xt=node(i).tPosition.x; filter=abs(xt-dx); if (node(i).type~=0) && (node(i).finish~=2) && (filter<=step/2) for j=1:anchorN dd=dst(node(i),node(j)); mean=dd; xi=100; sigma=mean/xi; dwe=normrnd(mean,sigma^0.5,1,1); while dwe<dd dwe=normrnd(mean,sigma^0.5,1,1); end dd=dwe; H=abs(node(i).Heigh-node(j).Heigh); r(j)=sqrt(dd^2-H^2); end found=0; a1=-1; a2=-1; x=0;y=0; tx=0;ty=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>=perror&&ca1<=1+(1-perror) || ca2>=perror&&ca2<=1+(1-perror) % if round(ca1*100/100)==1 || round(ca2*100/100)==1 if ca1>=1||ca2>=1 a1=k;a2=j; node(i).test=max([a1 a2]); node(i).err=min([abs(d1-judge(k,j)) abs(d2-judge(k,j))]); 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=abs(node(a1).tPosition.z+(node(a1).Heigh-node(i).Heigh)); while y>DY y=DY-(y-DY); y=abs(y); end if y>DY i end %%%%%%refine%%%%%%%%%%%%%%%%%%%%%%%%%%%% if node(i).finish==0 node(i).finish=1; node(i).ePosition.x=x;node(i).ePosition.y=y; elseif node(i).finish==1 tx=node(i).ePosition.x;ty=node(i).ePosition.y; node(i).ePosition.x=x;node(i).ePosition.y=y; node(i).finish=2; end res=0; for j=1:anchorN dd=dst(node(i),node(j))*derror; res=res+abs(edst(node(i),node(j))-dd); end res=res/comR/2; if node(i).res==0 node(i).res=res; elseif node(i).res>res node(i).ePosition.x=tx;node(i).ePosition.y=ty; node(i).res=res; end end endif node(i).finish~=0 %[node(i).ePosition.x,node(i).ePosition.y]=myrefine(node(i),node(1),node(2),derror);endend dx=dx+1;%step; end %%%%%%%%%%%%%count%%%%%%%%%%%%%%%%%%%%%%%%% myerror1=0; err1=0; locait=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; err1=err1+node(i).err; 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; err=err+err1/locait;endra(step)=ratio/m;merr(step)=myerror/m;err(step)=err/m;endsave data4500.dat ra merr err -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 + -