MATLAB仿真节点个数和节点通信半径与网络连通率的关系,WSN实验

判断连通的方法

在这里插入图片描述

1.不同节点数n,连通率(y轴)和连通半径(x轴)的关系。

function函数:

function [rate_1]=liantong(jiedian)
rate_1 = zeros(1,100);
r=0.01:0.01:1;
for k=1:1:100
for number=1:1:1000  %循环次数
flag_overflow=1;
x=rand(jiedian,1);%10个节点
y=rand(jiedian,1);
for num=1:1:jiedian
for sec_num=1:1:jiedian
    if(sqrt((x(num)-x(sec_num))^2+(y(num)-y(sec_num))^2)<r(k))
        p(num,sec_num)=1;%连通
    else
        p(num,sec_num)=0;%不连通
    end
end
end
t=p;
for s=1:1:(jiedian-1)  %warshell算法 叠乘
    t=t*p;
end
for i=1:1:jiedian
for j=1:1:jiedian
if t(i,j)<=10
flag_overflow=0;%不连通,跳出循环
break;
end
end
if flag_overflow==0
break;
end
end
rate_1(k)=rate_1(k)+flag_overflow;%把1000次中累积连通的次数加起来,待会去除1000
end
rate_1(k)=rate_1(k)/1000;
end
end

主函数:

%不同节点数n,连通率(y轴)和连通半径(x轴)的关系。
%四条曲线,节点数分别为 10 20 50 100
for i=1:1:4
    if(i==1)     
        rate1=liantong(10);
    end
    if(i==2)
         rate2=liantong(20);
    end
    if(i==3)
     
         rate3=liantong(50);
    end
    if(i==4)
         rate4= liantong(100);
    end  
end
x_lab=0.01:0.01:1;
plot(x_lab,rate1,'+-r');
hold all;
plot(x_lab,rate2,'b--');
hold all;
plot(x_lab,rate3,'ko-');
hold all;
plot(x_lab,rate4,'g*-');
xlabel( '通信半径')
ylabel('网络连通率')
legend('n=10','n=20','n=50','n=100')

2.不同的连通半径,连通率与节点个数的关系

连通半径是0.05,0.15,0.25,0.35,0.45,x轴是节点数,y轴是联通率
function函数:

function [rate_1]=liantong2(radio)
number_max = 1000;

rate_1 = zeros(1,100);
x_y_1 = [];
r_1 = radio;
for k=1:1:100
p = zeros(k,k);%存放k*k矩阵的联通值0或1
for number=1:1:number_max
flag_overflow=1;
%x=rand(k,1);%每次随x生成1-100
%y=rand(k,1);%生成联通点,x,y
x_y_1 =rand(k,2,1);
%生成p的联通矩阵
for num=1:1:k
for sec_num=1:1:k
if(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;
else
p(num,sec_num)=0;
end
end
end
%p复制给t进行联通率判断
t=p;
p;
%图论的联通率判断法
for s=1:1:k-1
t=t*p;
end
%两层循环判断是否全联通
for i=1:1:k
for j=1:1:k
if t(i,j)<=0
flag_overflow=0;
break;
end
end
if flag_overflow==0
break;
end
end
rate_1(k)=rate_1(k)+flag_overflow;
end
rate_1(k)=rate_1(k)/number_max;
end

end

主函数:

%连通半径是0.05,0.15,0.25,0.35,0.45
%x轴是节点数
%y轴是联通率
number_max = 1000;
for i=1:1:5
    if(i==1)     
        rate1=liantong2(0.05);
    end
    if(i==2)
         rate2=liantong2(0.15);
    end
    if(i==3)
     
         rate3=liantong2(0.25);
    end
    if(i==4)
         rate4= liantong2(0.35);
    end  
    if(i==5)
         rate5= liantong2(0.45);
    end  
end

x_lab=1:1:100;
plot(x_lab,rate1,'+-r');
hold all;
plot(x_lab,rate2,'b--');
hold all;
plot(x_lab,rate3,'ko-');
hold all;
plot(x_lab,rate4,'g*-');
hold all;
plot(x_lab,rate5,'yo-');
xlabel( '节点个数')
ylabel('网络连通率')
legend('r=0.05','r=0.15','r=0.25','r=0.35','r=0.45')


实验结果:

在这里插入图片描述

在这里插入图片描述

3.构建一个随机网络并判断其连通性,绘图

P=rand(50,2);%产生50个点
plot(P(:,1),P(:,2),'r*'),xlabel('{k=50,r=0.4}'); %将所有点绘制出来
hold on

%将每两个点之间的距离与通信半径比较
for i=1:50
    for j=i:50
    x1=P(i,1);
    x2=P(j,1);
    y1=P(i,2);
    y2=P(j,2);
    if norm([P(i,1),P(i,2)]-[P(j,1),P(j,2)])<0.4 %判断任意两点间距离
         plot([x1,x2],[y1,y2]);   %在两点间划线
    end
end
    
end

结果图:
在这里插入图片描述

  • 8
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值