我正在尝试生成一系列数字来模拟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/