Python Entropy calculation atoms simulation

AI Thread Summary
The discussion focuses on a program simulating a stochastic system of 400 particles and the user's challenge in dividing a 200x200 grid into 2x2 smaller grids for entropy calculation. The user seeks assistance in implementing this division to compute probabilities for entropy determination. A suggestion is made to start with a smaller 4x4 matrix to understand how to create the 2x2 submatrices, emphasizing the importance of correctly identifying the entries for each submatrix. The user has provided code snippets to illustrate their current implementation and the issues faced. The conversation highlights the need for clarity in matrix manipulation to achieve the desired simulation outcomes.
ChrisVer
Science Advisor
Messages
3,372
Reaction score
465
I have the following program that simulates a stochastic system of 400 particles. What I want to do now is separate 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.

Python:
import sys
from pylab import *
from random import randintion() #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()
wait= raw_input("Press return to continue")

#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()

wait= raw_input("Press Return to exit")
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
 
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.
 
Dear Peeps I have posted a few questions about programing on this sectio of the PF forum. I want to ask you veterans how you folks learn program in assembly and about computer architecture for the x86 family. In addition to finish learning C, I am also reading the book From bits to Gates to C and Beyond. In the book, it uses the mini LC3 assembly language. I also have books on assembly programming and computer architecture. The few famous ones i have are Computer Organization and...
I have a quick questions. I am going through a book on C programming on my own. Afterwards, I plan to go through something call data structures and algorithms on my own also in C. I also need to learn C++, Matlab and for personal interest Haskell. For the two topic of data structures and algorithms, I understand there are standard ones across all programming languages. After learning it through C, what would be the biggest issue when trying to implement the same data...

Similar threads

Back
Top