我正在尝试生成一系列数字来模拟R中的Levy Walk。目前,我正在使用以下代码:

alpha=2
n=1000
x=rep(0,n)
y=rep(0,n)

for (i in 2:n){
   theta=runif(1)*2*pi
   f=runif(1)^(-1/alpha)
   x[i]=x[i-1]+f*cos(theta)
   y[i]=y[i-1]+f*sin(theta)
}

该代码按预期工作,我能够根据我的要求生成数字。下图显示了这样的Levy Walk:

以下直方图确认所生成的数字(即f)实际上属于幂定律:



我的问题如下:
产生的步长(即f)很大。我可以修改代码以使步长仅落在[fmin,fmax]的一定范围内吗?

P.S.我故意不对代码进行矢量化处理。

最佳答案

尝试使用此:

f=runif(1, fmax^(-alpha), fmin^(-alpha))^(-1/alpha)

请注意,您需要0 < fmin < fmax

顺便说一句,您可以像这样向量化您的代码:
theta <- runif(n-1)*2*pi
f <- runif(n-1, fmax^(-alpha), fmin^(-alpha))^(-1/alpha)
x <- c(0, cumsum(f*cos(theta)))
y <- c(0, cumsum(f*sin(theta)))

关于r - R中的Levy Walk模拟,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19208502/

10-12 15:04
查看更多