《无线传感网技术》实验二班级:微电子1102 学号:0301110213 姓名:王绪安一、实验目的通过仿真实验,掌握无线传感网络联通率与通信半径以及节点数目之间的关系。
二、实验内容(1)在不同节点数目n 情况下,用Matlab 拟合出连通率与通信半径的关系曲线。
(2)在不同通信半径R 情况下,用Matlab 拟合出连通率与节点数量n 的关系曲线。
三、实验思路分析过程(包括程序说明)用计算机语言编写图的连通性判断算法,判断节点是否连通以及确定连通分支的个数,Warshell 算法实现方法Warshell 算法Warshell 算法可解决图是否连通的问题, 而且效率很高。
在该算法中,矩阵P 是判断矩阵,1=ij p 表示从i 到j 连通,0=ij p 表示从i 到j 不连通。
T 矩阵是模拟节点的两两直接连通矩阵T ij =1表示从i 到j 连通,T ij =0表示从i 到j 不连通。
(1)置新矩阵 P:= T ;(2)k=1.....9,P=P*T ;循环叠乘得出最终连通矩阵。
(3)对P 矩阵P ij 进行连续判断,若有P ij <=0,则该图不连通,跳出循环。
(4)重复上面操作1000次,累计连通图的次数n,得出连通率。
四、实验程序(1)在不同节点数目n 情况下,用Matlab 拟合出连通率与通信半径的关系曲线。
rate_1 = zeros(1,100);r=0.01:0.01:1;for k=1:1:100for number=1:1:1000flag_overflow=1;x=rand(10,1);y=rand(10,1);for num=1:1:10for sec_num=1:1:10if(sqrt((x(num)-x(sec_num))^2+(y(num)-y(sec_num))^2)<r(k)) p(num,sec_num)=1;elsep(num,sec_num)=0;endendendt=p;for s=1:1:9t=t*p;endfor i=1:1:10for j=1:1:10if t(i,j)<=10flag_overflow=0;break;endendif flag_overflow==0break;endendrate_1(k)=rate_1(k)+flag_overflow;endrate_1(k)=rate_1(k)/1000;endrate_2 = zeros(1,100);r=0.01:0.01:1;for k=1:1:100for number=1:1:1000flag_overflow=1;x=rand(20,1);y=rand(20,1);for num=1:1:20for sec_num=1:1:20if(sqrt((x(num)-x(sec_num))^2+(y(num)-y(sec_num))^2)<r(k)) p(num,sec_num)=1;elsep(num,sec_num)=0;endendendt=p;for s=1:1:19t=t*p;endfor i=1:1:20for j=1:1:20if t(i,j)<=10flag_overflow=0;break;endendif flag_overflow==0break;endendrate_2(k)=rate_2(k)+flag_overflow;endrate_2(k)=rate_2(k)/1000;endrate_3 = zeros(1,100);r=0.01:0.01:1;for k=1:1:100for number=1:1:1000flag_overflow=1;x=rand(50,1);y=rand(50,1);for num=1:1:50for sec_num=1:1:50if(sqrt((x(num)-x(sec_num))^2+(y(num)-y(sec_num))^2)<r(k)) p(num,sec_num)=1;elsep(num,sec_num)=0;endendendt=p;for s=1:1:49t=t*p;endfor i=1:1:50for j=1:1:50if t(i,j)<=10flag_overflow=0;break;endendif flag_overflow==0break;endendrate_3(k)=rate_3(k)+flag_overflow;endrate_3(k)=rate_3(k)/1000;endrate_4 = zeros(1,100);r=0.01:0.01:1;for k=1:1:100for number=1:1:1000flag_overflow=1;x=rand(100,1);y=rand(100,1);for num=1:1:100for sec_num=1:1:100if(sqrt((x(num)-x(sec_num))^2+(y(num)-y(sec_num))^2)<r(k)) p(num,sec_num)=1;elsep(num,sec_num)=0;endendendt=p;for s=1:1:99t=t*p;endfor i=1:1:100for j=1:1:100if t(i,j)<=10flag_overflow=0;break;endendif flag_overflow==0break;endendrate_4(k)=rate_4(k)+flag_overflow; endrate_4(k)=rate_4(k)/1000;endx_lab=0.01:0.01:1;plot(x_lab,rate_1,'+-r');hold all;plot(x_lab,rate_2,'b--');hold all;plot(x_lab,rate_3,'ko-');hold all;plot(x_lab,rate_4,'g*-');xlabel( '通信半径')ylabel('网络连接概率')(2)在不同通信半径R情况下,用Matlab拟合出连通率与节点数量n的关系曲线。
%联通半径是0.05,0.15,0.25,0.35%x轴是节点数%y轴是联通率%k是结点数number_max = 1000;rate_1 = zeros(1,100);x_y_1 = [];r_1 = 0.15;for k=1:1:100p = zeros(k,k);%存放k*k矩阵的联通值0或1for number=1:1:number_maxflag_overflow=1;%x=rand(k,1);%每次随x生成1-100%y=rand(k,1);%生成联通点,x,yx_y_1 =rand(k,2,1);%生成p的联通矩阵for num=1:1:kfor sec_num=1:1:kif(sqrt((x_y_1(num,1)-x_y_1(sec_num,1))^2+(x_y_1(num,2)-x_y_1(sec_num,2))^2)< r_1)p(num,sec_num)=1;elsep(num,sec_num)=0;endendend%p复制给t进行联通率判断t=p;p;%图论的联通率判断法for s=1:1:k-1t=t*p;end%两层循环判断是否全联通for i=1:1:kfor j=1:1:kif t(i,j)<=0flag_overflow=0;break;endendif flag_overflow==0break;endendrate_1(k)=rate_1(k)+flag_overflow;endrate_1(k)=rate_1(k)/number_max;endrate_2 = zeros(1,100);x_y_2 = [];r_2 = 0.25;for k=1:1:100p = zeros(k,k);%存放k*k矩阵的联通值0或1for number=1:1:number_maxflag_overflow=1;%x=rand(k,1);%每次随x生成1-100%y=rand(k,1);%生成联通点,x,yx_y_2 =rand(k,2,1);%生成p的联通矩阵for num=1:1:kfor sec_num=1:1:kif(sqrt((x_y_2(num,1)-x_y_2(sec_num,1))^2+(x_y_2(num,2)-x_y_2(sec_num,2))^2)< r_2)p(num,sec_num)=1;elsep(num,sec_num)=0;endendend%p复制给t进行联通率判断t=p;p;%图论的联通率判断法for s=1:1:k-1t=t*p;end%两层循环判断是否全联通for i=1:1:kfor j=1:1:kif t(i,j)<=0flag_overflow=0;break;endendif flag_overflow==0break;endendrate_2(k)=rate_2(k)+flag_overflow;endrate_2(k)=rate_2(k)/number_max;endrate_3 = zeros(1,100);x_y_3 = [];r_3 = 0.35;for k=1:1:100p = zeros(k,k);%存放k*k矩阵的联通值0或1for number=1:1:number_maxflag_overflow=1;%x=rand(k,1);%每次随x生成1-100%y=rand(k,1);%生成联通点,x,yx_y_3 =rand(k,2,1);%生成p的联通矩阵for num=1:1:kfor sec_num=1:1:kif(sqrt((x_y_3(num,1)-x_y_3(sec_num,1))^2+(x_y_3(num,2)-x_y_3(sec_num,2))^2)< r_3)p(num,sec_num)=1;elsep(num,sec_num)=0;endendend%p复制给t进行联通率判断t=p;p;%图论的联通率判断法for s=1:1:k-1t=t*p;end%两层循环判断是否全联通for i=1:1:kfor j=1:1:kif t(i,j)<=0flag_overflow=0;break;endendif flag_overflow==0break;endendrate_3(k)=rate_3(k)+flag_overflow; endrate_3(k)=rate_3(k)/number_max;endrate_4 = zeros(1,100);x_y_4 = [];r_4 = 0.45;for k=1:1:100p = zeros(k,k);%存放k*k矩阵的联通值0或1for number=1:1:number_maxflag_overflow=1;%x=rand(k,1);%每次随x生成1-100%y=rand(k,1);%生成联通点,x,yx_y_4 =rand(k,2,1);%生成p的联通矩阵for num=1:1:kfor sec_num=1:1:kif(sqrt((x_y_4(num,1)-x_y_4(sec_num,1))^2+(x_y_4(num,2)-x_y_4(sec_num,2))^2)< r_4)p(num,sec_num)=1;elsep(num,sec_num)=0;endendend%p复制给t进行联通率判断t=p;p;%图论的联通率判断法for s=1:1:k-1t=t*p;end%两层循环判断是否全联通for i=1:1:kfor j=1:1:kif t(i,j)<=0flag_overflow=0;break;endendif flag_overflow==0break;endendrate_4(k)=rate_4(k)+flag_overflow;endrate_4(k)=rate_4(k)/number_max;endx_lab=1:1:100;plot(x_lab,rate_1,'+-r');hold all;plot(x_lab,rate_2,'b--');hold all;plot(x_lab,rate_3,'ko-');hold all;plot(x_lab,rate_4,'g*-');五、实验结果不同节点数n,连通率与通信半径R的关系曲线图一不同通信半径R,连通率与节点数n的关系曲线图二。