节点移动模型MATLAB仿真
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
高斯马尔科夫模型实现和仿真
高斯马尔科夫模型描述
高斯马尔科夫模型描述为每个节点被赋予一个当前的速率v 和方向sita ,在一个固定的时间间隔 ∆t(时隙)后,每个节点更新当前的速率和方向,每次间隔之初更新,更新公式如下:
1(1)t t n v av a v +=+-,1(1)t t n a a θθθ+=+-+。在每个指定的时间∆周期t 内,得到1t v +和1t θ+ 的计算值,则运动的目标位置可以通过下述式子得到:1cos t t t t x x v t θ+=+⋅⋅,1sin t t t t y y v t θ+=+⋅⋅。一个时间间隔内,节点都按照v 匀速运动到目标位置,称为一个step 。
一个完整的step 包括:
1.节点参数的设置:
仿真时间:T=1000;
步进时间:dt=1;步进时间越小,路径曲线越光滑。
时间间隔:nt=20;
速度范围:vmin=1;vmax=1.5;
场景范围:xmin=0;xmax=100;ymin=0;ymax=50;
随机产生起始点的位置:xa=unifrnd(0,100,[1,1]); ya=unifrnd(0,50,[1,1]); 初始速率设置为速率分布的期望:va=(vmin+vmax)/2;%初始速度
初始速度方向设置为方向分布的期望:sitaa=(0+2*pi)/2;
速率平均值:vmean=(vmin+vmax)/2;
速度方向平均值: sitamean=(0+2*pi)/2;
2.节点随机初始速度设置为vmean=(vmin+vmax )/2,sitamean=(0+2*pi)/2;随机获取初始位置xa,ya ∆。固定一个时间间隔t=20。vn,sitan 是服从高斯分布的随机变量,vn 服从均值为
1.5,方差为0.2的高斯分布:vn=normrnd(1.5,0.2,1,1),sitan 服从均值为pi ,方差为0.2的高斯分布sitan =normrnd(pi,0.2,1,1);随机变量a 的范围是(0,1),并且在这个范围内均匀分布。
2.节点在每个时间间隔更新速率和速度方向,根据初始节点的位置得到移动的目标位置xb ,yb 。
3.目标节点位置变为下一个step 的初始节点。
模型参数设置:
变量:调节参数a,速度v ,方向sita ,节点位置(x,y ),随机参数vn,sitan 初始节点位置节点位置:xmin=0;xmax=100;ymin=0;ymax=50; A(xa,ya)
初始节点速度参数:vmin=1;vmax=2;,速度平均值vmean=(vmin+vmax)/2, 速度方向平均值sitamean=(0+2*pi)/2
时间参数:nt=20;
clear all ;
%相关参数设定
T=1000;%仿真时间s
dt=1;%补进时间s
nt=30;%时间间隔
vmin=0.5;vmax=1;%速度范围
tmin=0.1;tmax=0.1;%停顿时间范围s
xmin=0;xmax=1000;ymin=0;ymax=500;%场景的范围
tex=0;%初始化运行时间记忆变量
%axis([xmin xmax ymin ymax]);%设定坐标范围
%figure(1);
hold on;%保留绘图内容
xa=unifrnd(0,100,[1,1]);%随机发生起始点坐标
ya=unifrnd(0,50,[1,1]);
va=(vmin+vmax)/2;%初始速度
sitaa=(0+2*pi)/2;%随机发生一个初始速度方向,前进角度服从均匀分布
vmean=(vmin+vmax)/2;%速度平均值
sitamean=(0+2*pi)/2;%速度方向平均值
while(1)
a=unifrnd(0,1,[1,1]);%a用来调节随机性
vn=normrnd(1.5,0.2,1,1);%服从高斯分布的速率参数
sitan=normrnd(pi,0.2,1,1);%服从高斯分布的速度方向参数
vb=a*va+(1-a)*vmean+sqrt((1-a^2))*vn;%到达目的节点后确定下一段的速度
sitab=a*sitaa+(1-a)*sitamean+sqrt((1-a^2))*sitan;%到达目的节点后确定下一段的速度方向
if T-tex>=nt
for t=0:dt:nt
xb=xa+va*cos(sitab)*t;
yb=ya+va*sin(sitab)*t;%节点在到达目的节点后可以确定下一目的节点的位置 plot(xb,yb,'.');
if xb xa=xa+xmax; elseif xb>xmax %x坐标到达右边界 xa=xa-xmax; end if yb ya=ya+ymax; elseif yb>ymax %y坐标到达上边界 ya=ya-ymax; end tex=tex+dt; end else for t=0:dt:T-tex xb=xa+va*cos(sitab)*t; yb=ya+va*sin(sitab)*t;%节点在到达目的节点后可以确定下一目的节点的位置 plot(xb,yb,'.'); if xb xa=xa+xmax; elseif xb>xmax %x坐标到达右边界 xa=xa-xmax; end if yb ya=ya+ymax; elseif yb>ymax %y坐标到达上边界 ya=ya-ymax; end tex=tex+dt; return end end xa=xb;ya=yb;%将目标点更新为新Step的起点 va=vb,sitaa=sitab; end