我试图模拟在一个正方形周围走动,这样走到广场附近的顶点的概率是p / 2向左,p / 2向右,然后$ 1-p $对角走。我编写了一些代码来模拟这个并创建了一个函数来计算顶点子集的出现次数。当使用起始顶点作为子集时,它接近理论告诉我应该期望的0.25的值。
move_func <- function(x, n){
pl <- c(x)
for(i in 1:n){
k <- cbind(replicate(p*1000,c(1,0)),replicate(p*1000, c(0,1)),replicate((1-
p)*2000, c(1,1))) #produces matrix of vectors in proportion to probabilities
x <- (x + k[,sample(ncol(k), 1)])%%2 # samples from matrix to get 2 x 1
#vector representing a movement around the square
pl <- cbind(pl, x) #adds new movement to matrix of verticies visited
}
return(pl) # returns final matrix will all verticies visited on the walk
}
test_in_H <- function(x, H){
sum(apply(H,2,identical, x = x)) # tests if vector x is in subset H (a
# matrix)
}
pl <- move_func(x, n)
print(mean(replicate(100, sum(apply(pl, 2, test_in_H, H = H ))/n))) #repeats
#the simulation 100 times and finds the average
}
然而,即使在步行中采取了很多步骤并且重复多次,它也会因此而变化很大。
有没有人知道我在我的代码中是否犯了错误,或者由于它是模拟而只是变化很大。