📄 mobitps3.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 + -