Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Python Entropy calculation atoms simulation

  1. Apr 6, 2016 #1

    ChrisVer

    User Avatar
    Gold Member

    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:
    [itex]P_i= \frac{\sum_{\text{atoms}}}{4}[/itex]
    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()
    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")
     

    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. jcsd
  3. Apr 12, 2016 #2
    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?
     
  4. Apr 12, 2016 #3

    Mark44

    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.
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook

Have something to add?
Draft saved Draft deleted



Similar Discussions: Entropy calculation atoms simulation
  1. Quantum Simulation (Replies: 5)

  2. Physics simulation (Replies: 5)

  3. Simulating the world (Replies: 14)

Loading...