Entropy calculation atoms simulation

Click For Summary
SUMMARY

The discussion focuses on simulating a stochastic system of 400 particles within a 200x200 grid and calculating entropy based on smaller 2x2 sub-grids. The user seeks assistance in dividing the grid into these sub-grids to compute probabilities using the formula P_i = \frac{\sum_{\text{atoms}}}{4}. The provided Python code outlines the simulation process, including atom movement and boundary checks, but lacks clarity on how to implement the sub-grid division effectively. A suggestion is made to start with a smaller 4x4 matrix to understand the division into 2x2 matrices.

PREREQUISITES
  • Python programming with libraries such as NumPy and Matplotlib
  • Understanding of stochastic systems and particle simulations
  • Knowledge of entropy calculation in statistical mechanics
  • Familiarity with matrix operations and indexing in Python
NEXT STEPS
  • Implement a function to divide a 200x200 matrix into 2x2 sub-matrices in Python
  • Learn about NumPy's advanced indexing techniques for matrix manipulation
  • Research entropy calculation methods in statistical mechanics
  • Explore visualization techniques for particle simulations using Matplotlib
USEFUL FOR

Researchers and developers working on particle simulations, physicists studying stochastic systems, and anyone interested in computational methods for entropy calculation.

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.
 

Similar threads

  • · Replies 3 ·
Replies
3
Views
2K
Replies
1
Views
3K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 6 ·
Replies
6
Views
5K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 6 ·
Replies
6
Views
2K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 17 ·
Replies
17
Views
3K
  • · Replies 4 ·
Replies
4
Views
2K