这是我在 python 中模拟 3 维随机游走的代码的代码。它返回步行返回原点的百分比。Polya 的常数是步行返回 3 维原点的概率约为 34%。我的百分比只有 11-12%。如果我乘以三(作为猜测),答案变得相当接近 Polya 的常数,但大多数时候看起来更接近 36%。请让我知道这个问题的数学、逻辑或编码中的错误是什么。提前致谢。
def r3walk(T):
x = np.zeros((T))
y = np.zeros((T))
z = np.zeros((T))
count = 0
for t in range(1,T):
walk = random.uniform(0.0,1.0)
if 0 < walk < 1/float(6):
x[t] = x[t-1] + 1
elif 1/float(6) < walk < 2/float(6):
x[t] = x[t-1] - 1
elif 2/float(6) < walk < 3/float(6):
y[t] = y[t-1] + 1
elif 3/float(6) < walk < 4/float(6):
y[t] = y[t-1] - 1
elif 4/float(6) < walk < 5/float(6):
z[t] = z[t-1] + 1
else:
z[t] = z[t-1] - 1
for t in range(1,T):
if [x[t],y[t],z[t]] == [0,0,0]:
count += 1
return count/float(T)
编辑代码:
def r32walk(T):
x = np.zeros((T))
y = np.zeros((T))
z = np.zeros((T))
count = 0
for t in range(1,T):
walk1 = random.uniform(0.0,1.0)
if walk1 > 0.5:
x[t] = x[t-1] + 1
else:
x[t] = x[t-1] - 1
for t in range(1,T):
walk2 = random.uniform(0.0,1.0)
if walk2 > 0.5:
y[t] = y[t-1] + 1
else:
y[t] = y[t-1] - 1
for t in range(1,T):
walk3 = random.uniform(0.0,1.0)
if walk3 > 0.5:
z[t] = z[t-1] + 1
else:
z[t] = z[t-1] - 1
for t in range(1,T):
if [x[t],y[t],z[t]] == [0,0,0]:
count += 1
#return x,y,z
return count/float(T) * 100