%matalb仿真代码
%最小功率路由(2跳)
clear all
clc
x0=0
y0=0
plot(x0,y0,'o')
hold on%建立源节点
xn=10
yn=10
plot(xn,yn,'v')
hold on%建立目的节点
x=10*rand(1,10)
y=10*rand(1,10)
plot(x,y,'+')
hold on%建立网络中的节点
E=1e+02
K=1
a=3
d1=sqrt(x.^2+y.^2)
d2=sqrt((10-x).^2+(10-y).^2)
P=2*E+K*d1.^a+2*E+K*d2.^a
Pmin=min(min(P))
[xin,yin]=find(P==min(min(P)))
xx=x(yin)
yy=y(yin)
plot(xx,yy,'*')
hold on
plot([x0 xx xn],[y0 yy yn])
hold on
%最大剩余能量路由(2跳)
E0=5000*(rand(1,10)+0.5) %能量不同
%E0=3000*ones(1,10) %能量相同
P1=2*E+K*d1.^a
En1=E0-P1
Eax=max(max(En1))
[xax,yax]=find(En1==max(max(En1)))
yax1=yax
xx1=x(yax1)
yy1=y(yax1)
plot(xx1,yy1,'*')
hold on
plot([x0,xx1,xn],[y0,yy1,yn],'r')
title('形成链路比较')
legend('源节点','目的节点','网络中的节点','中继节点','最小功率','中继节点','最大剩余能量')
%消耗的总的传输功率
figure(2)
bar(P,1)
title('消耗的总的传输功率')
xlabel('节点序号')
ylabel('消耗功率')
%各节点剩余能量的分布
figure(3)
subplot(2,2,1)
E0(yax1)=Eax
E1=E0
bar(E1,1)
hold on
bar(En1,1,'y')
title('第1次传输各节点剩余能量的分布')
xlabel('节点序号')
ylabel('剩余能量')
subplot(2,2,2)
E2=E1
En2=E2-P1
Eax2=max(max(En2))
[xax ,yax2]=find(En2==max(max(En2)))
E2(yax2)=Eax2
bar(E2,1)
hold on
bar(En2,1,'y')
title('第2次传输各节点剩余能量的分布')
xlabel('节点序号')
ylabel('剩余能量')
subplot(2,2,3)
E3=E2
En3=E3-P1
Eax3=max(max(En3))
[xax, yax3]=find(En3==max(max(En3)))
E3(yax3)=Eax3
bar(E3,1)
hold on
bar(En3,1,'y')
title('第3次传输各节点剩余能量的分布')
xlabel('节点序号')
ylabel('剩余能量')
subplot(2,2,4)
E4=E3
En4=E4-P1
Eax4=max(max(En4))
[xax, yax4]=find(En4==max(max(En4)))
E4(yax4)=Eax4
bar(E4,1)
hold on
bar(En4,1,'y')
title('第4次传输各节点剩余能量的分布')
xlabel('节点序号')
ylabel('剩余能量')