Я объясняю вам мою проблему:Моделирование и гистограмма случайного скачка в Python
Представьте, что у вас есть бар с указанием позиций. Каждая позиция может быть подсчитана как позиция 0, позиция 1, .., позиция s-1. Теперь то, что я хочу сделать, это симулировать следующее: в определенный момент времени число частиц, скажем n частиц, начинается в состоянии бара (предположим, что позиция посередине). В этот момент со случайными вероятностями pr и pl (pr + pl = 1) эти частицы идут соответственно справа или слева. Таким образом, в основном вероятность отражает долю частиц, которые меняются справа или слева.
Я хочу повторить это несколько раз и посмотреть, что является конечной позицией частиц и построить гистограмму. Это мой функциональный прыжок, который я сделал для моделирования прыжков частиц.
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 будет представлять плотность частиц! Но я ошибаюсь –
Потому что я думаю, что до сих пор, что делает мой код, просто подсчитывается, сколько раз определенное количество частиц занимает состояние и намечает это как высоту гистограммы. –