【问题标题】:Simulation and Histogram of Random Hopping in PythonPython中随机跳跃的模拟和直方图
【发布时间】:2016-06-07 13:36:26
【问题描述】:

我向你解释我的问题:

假设你有一个酒吧,有 s 个职位。每个位置都可以算作位置 0、位置 1、..、位置 s-1。 现在我想做的是模拟以下内容:在某个时间点,许多粒子,比如 n 个粒子,以条的状态开始(假设在中间的位置)。 此时,随机概率为 pr 和 pl (pr + pl =1),该粒子分别向右或向左移动。所以基本上概率反映了粒子左右交换的比例。

我想重复多次,看看粒子的最终位置是什么,并绘制它的直方图。 这是我的函数 hop,我为了模拟粒子的跳跃而制作的。

def hop(n):
'''
n is the number of particles starting in the middle position.
'''

s = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,n,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
global ls
ls = len(s)
i = 0

while i < 100:
    for j in range(0,int(len(s))):
        if s[j] != 0 :
            pr = random.random()
            pl = 1 - pr
            if j - 1 < 0:
                s[j+1] = s[j+1]+int(s[j]*pr)
                s[j] = s[j] - int(s[j]*pr)
            elif len(s) <= j+1:
                s[j-1] = s[j-1] + int(s[j]*pl)
                s[j] = s[j] - int(s[j]*pl)
            else:
                s[j-1] = s[j-1] + int(s[j]*pl)
                s[j+1] = s[j+1] + int(s[j]*pr)
                s[j] = s[j] - int(s[j]*pr) - int(s[j]*pl)
            j+=1
        elif s[j] == 0:
            s[j] = 0
            j+=1
    i+=1
return s

这是我用来绘制直方图的其余部分:

x = hop(100)
y = sum(x) #This is for debugging purposes, I want to check that I'm left 
           with the right number of particles
list1 = []
for k in range(0,ls):
    list1.append(k)
plt.hist(x,list1)
plt.show()

我在哪里导入了 mathplotlib,特别是我已经导入了

import matplotlib.pyplot as plt
import random

我的问题是,从我获得的直方图中,这是非常错误的。事实上,直方图都向左倾斜,如果随机抽取概率,这是不可能的。 此外,直方图没有显示正确数量的粒子。

有人知道出了什么问题吗?

谢谢

【问题讨论】:

  • 我认为主要错误可能在直方图中。关键是我想要一个直方图,它可以显示每个状态最后有多少粒子。所以 x 轴代表所有状态,而 y 轴代表粒子的密度!但我弄错了
  • 因为我认为到目前为止我的代码所做的只是计算一定数量的粒子占据一个状态的次数并将其绘制为直方图的高度。

标签: python python-2.7 random histogram simulation


【解决方案1】:

我不知道我说的对不对,但是 你想看这个而不是直方图吗?

xs = np.arange(len(x))
width = 1/1.5
plt.bar(xs,x,width)

【讨论】:

  • 没问题,条形图将每一列连同您在 hop 函数中计算的值一起绘制。直方图将这些值放入箱中并绘制它们的分布。这就是为什么您最终会得到任何较小的值和较少的高值,如您所说。查看变量资源管理器中的列表 x 并检查其值。卢卡斯
  • 你认为经过多次重复后它变得凌乱并且没有任何可识别的模式是明智的吗?
猜你喜欢
  • 1970-01-01
  • 2014-11-12
  • 2019-06-12
  • 1970-01-01
  • 2021-09-26
  • 1970-01-01
  • 2013-07-23
  • 1970-01-01
  • 2021-04-21
相关资源
最近更新 更多