Python Entropy calculation atoms simulation

1. Apr 6, 2016

ChrisVer

I have the following program that simulates a stochastic system of 400 particles. What I want to do now is seperate the 200x200 grid into 2x2 smaller grids, out of which I will calculate each probability:
$P_i= \frac{\sum_{\text{atoms}}}{4}$
and from which in each step I'll be able to determine the entropy...
However I don't see how I can make the division to sub-grids.... any help?
In the second part of code quote I show what I've tried to implement..but I don't think it works.

Code (Python):

import sys
from pylab import *
from random import randint

ion() #allow animation
figure(figsize=(10,10)) #setup graph window

#Setup the problem
atoms = ones([400,2])*100                  #define all droplet coords to be at point 100,100
line, = plot(atoms[:,0], atoms[:,1], 'ro')
xlim(0,200)
ylim(0,200)
draw()

#time steps to take input
N= int(sys.argv[1])
#loop over steps
for i in range(N):

#Go through all atoms
for j in range(400):

#move each atom
atoms[j,0] += randint(-1,1)
atoms[j,1] += randint(-1,1)
#check boundary
x,y = (atoms[j,0], atoms[j,1])
if x==200: atoms[j,0] = 198
elif x==0: atoms[j,0] = 2
if y ==200: atoms[j,1] = 198
elif y==0: atoms[j,1] =2

#see how things look now
line.set_xdata(atoms[:,0])
line.set_ydata(atoms[:,1])
draw()

Code (Python):

xs= atoms[:,0]
ys= atoms[:,1]
P=zeros([100,100])
for i in range(0,200,2):
for j in range(0,200,2):
P[i/2,j/2] = xs[i]+xs[i+1] +ys[j] + ys[j+1]
P=P/4.
Entropy=0.0
for i in range(100):
for j in range(100):
if P[i,j]!=0: Entropy+= P[i,j]*log(P[i,j])
else: Entropy+=0.0

2. Apr 12, 2016

Greg Bernhardt

Thanks for the post! This is an automated courtesy bump. Sorry you aren't generating responses at the moment. Do you have any further information, come to any new conclusions or is it possible to reword the post?

3. Apr 12, 2016

Staff: Mentor

What I would do is start with a smaller matrix, say 4 x 4, and see what needs to be done to split it up into four 2 x 2 matrices. The upper left submatrix with consist of P[0, 0], P[0, 1], P[1, 0], and P[1, 1]. See if you can figure out what the entries would be for the upper right. lower left, and lower right submatrices. You might be able to extend the idea to splitting your 200 x 200 matrix into 10,000 2x2 submatrices.