Ich erkläre Ihnen mein Problem:Simulation und Histogramm von Random Hopping in Python
Stellen Sie sich vor, Sie haben eine Bar, mit sagen s Positionen. Jede Position kann als Position 0, Position 1, .., Position s-1 gezählt werden. Nun, was ich tun möchte, ist das Simulieren der folgenden: Zu einem bestimmten Zeitpunkt, eine Anzahl von Teilchen, sagen wir n Teilchen, beginnen in einem Zustand der Bar (eine Position in der Mitte annehmen). An diesem Punkt mit zufälligen Wahrscheinlichkeiten pr und pl (pr + pl = 1) gehen diese Teilchen nach rechts oder links. Im Grunde spiegelt die Wahrscheinlichkeit den Anteil der Teilchen wider, die nach rechts oder links wechseln.
Ich möchte dies einige Male wiederholen und sehen, was die endgültige Position der Partikel ist, und ein Histogramm davon aufzeichnen. Das ist meine Funktion Hop, die ich gemacht habe, um das Hopping der Partikel zu simulieren.
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
Und hier ist der Rest, dass ich das Histogramm zeichnen verwendet:
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()
Wo ich mathplotlib importiert haben, und ich habe speziell
import matplotlib.pyplot as plt
import random
Mein Problem ist, dass importierte Aus den Histogrammen, die ich erhalte, geht etwas sehr falsch. Tatsächlich sind die Histogramme alle nach links verschoben, was nicht möglich wäre, wenn die Wahrscheinlichkeiten zufällig gewählt werden. Außerdem zeigt das Histogramm nicht die richtigen Mengen an Partikeln an.
Versteht jemand, was schief läuft?
Dank
Ich denke, der Hauptfehler könnte im Histogramm sein. Der Punkt ist, dass ich ein Histogramm haben möchte, das mir zeigt, wie viele Teilchen es in jedem Zustand am Ende gibt. Also würde die X-Achse alle Zustände darstellen, während die Y-Achse die Dichte der Teilchen darstellen würde! Aber ich verstehe es falsch –
Weil ich denke, dass bis jetzt, was mein Code tut, ist einfach zu zählen, wie oft eine bestimmte Anzahl von Teilchen einen Zustand besetzen und dies als Höhe des Histogramms aufzeichnen. –