我正在研究模拟粒子的随机运动,有两次指数分布随机定义为t1和t2。对于小于t1的时间,粒子处于自由随机运动中,而对于t1和t2之间的时间,粒子在随机方向上具有恒定的漂移速度(对于1D运动,正方向或负方向)。我反复迭代它来改变t1和t2并更新粒子的位置,直到达到所需的模拟时间。代码的问题在于,由于嵌套的for和if语句(我希望运行~10000个轨迹),它效率太低。你能建议任何有效的方法吗?谢谢 !
while i<=length(time_list)
j(:,m)=taum_list(mu);
% updating random numbers t1 (resting time) and
% t2(moving time)
for i = k:floor(sum(j(:,m))+(i))
if(( i-k ) < j(1,m))
Xp(i,2) = Xp(i-1,2) + sqrt(2*Diff*dt)*randn(1);
elseif((i-k) >= j(1,m))
Xp(i,2) = Xp(i-1,2) + sqrt(2*Diff*dt)*randn(1) + v*dt;
end
end
k=i;
i=floor(i+sum(j(:,m)));
m=m+1;
end
下面,
time_list
=我想跟踪动作的时间,
v
=粒子移动的速度是一个参数,taum_list(mu)是一个返回两个时间值t1和t2的函数,指数随机分布为均值mu。
j
变量存储所有t1和t2值,以便稍后使用它们来区分漂移和非漂移运动的区域,并将位置绘制为图形上时间的函数
j(1,m)=t1; j(2,m)=t2