Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 三维随机游动返回原点的概率_Python_Probability_Random Walk - Fatal编程技术网

Python 三维随机游动返回原点的概率

Python 三维随机游动返回原点的概率,python,probability,random-walk,Python,Probability,Random Walk,下面是我用python模拟三维随机行走的代码。它返回行走返回原点的时间百分比。波利亚常数约为步行返回三维原点的34%。我的百分比只有11-12%。如果我乘以3(作为猜测),答案会变得非常接近波利亚常数,但大多数时候它看起来更接近36%。请让我知道这个问题的数学、逻辑或编码错误是什么。提前谢谢 def r3walk(T): x = np.zeros((T)) y = np.zeros((T)) z = np.zeros((T)) count = 0 for t in range(1,T):

下面是我用python模拟三维随机行走的代码。它返回行走返回原点的时间百分比。波利亚常数约为步行返回三维原点的34%。我的百分比只有11-12%。如果我乘以3(作为猜测),答案会变得非常接近波利亚常数,但大多数时候它看起来更接近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)
我把这当作一个模拟问题;做大量的随机游动,看看有多少比例的游动在大量的步数内返回原点。最简单的实现是一个函数完成一次行走,第二个函数完成重复

import random

def simulation(dimensions, repeats, steps):
    """Simulate probability of returning to the origin."""
    return sum(random_walk(dimensions, steps) 
               for _ in range(repeats)) / float(repeats)

def random_walk(n, s):
    """Whether an n-D random walk returns to the origin within s steps."""
    coords = [0 for _ in range(n)]
    for _ in range(s):
        coords[random.randrange(n)] += random.choice((1, -1))
        if not any(coords):
            return True
    return False

print [simulation(3, 100, 1000) for _ in range(10)]
越大的
步数
重复次数
越大(即,我们越接近“真实”情况,所有可能的行走步数都是无限的),我期望的输出变化越小。对于显示的数字,我得到:

[0.33, 0.36, 0.34, 0.35, 0.34, 0.29, 0.34, 0.28, 0.31, 0.36]

我认为你的方法是完全错误的;您正在模拟一次行走并测量其返回原点的频率,而不是模拟多次行走并测量在一定步数内返回原点的次数。我按照我的解释方式进行了检查,得到了0.341,0.351和0.334,用于三组1000个模拟,最多1000个步骤。我试图实现您的方法,但我显然遇到了更多错误,因为我得到了基本上为零的百分比。你能告诉我你是如何解决这个问题的吗?
[0.33, 0.36, 0.34, 0.35, 0.34, 0.29, 0.34, 0.28, 0.31, 0.36]