随机方向随机时间以恒定漂移速度迭代随机运动

时间:2017-05-15 07:29:03

标签: matlab performance random nested-loops

我正在研究模拟粒子的随机运动,有两次指数分布随机定义为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

0 个答案:

没有答案