, , . , . - 200x200 (40000) 3% . montecarlo netenergy. 5 , :
top = nx.adjacency_matrix(G)
def netenergy(N, state):
en = 0.
for i in range(N):
ss = np.sum(state[top[i].nonzero()[1]])
en += state[i] * ss
return -0.5 * J * en
0,5 - , !
def montecarlo(state, N, beta, top):
rsnode = np.random.randint(0, N)
s = state[rsnode]
ss = np.sum(state[top[rsnode].nonzero()[1]])
delE = 2.0 * J * ss * s
prob = math.exp(-delE * beta)
if prob > random.random():
s = -s
state[rsnode] = s
return state
2.0 - !
numpy. top[i] - node top[i].nonzero()[1] - (top[i].nonzero()[0] - , 0, - ). state[top[i].nonzero()[1]] , , node i.
. , :
e1 = e0 + ene * ene
m1 = m0 + mag * mag
:
e1 = e1 + ene * ene
m1 = m1 + mag * mag
specificheat.append( e1/steps - e0*e0/(steps*steps) /(N* t * t))
susceptibility.append( m1/steps - m0*m0/(steps*steps) /(N* t *t))
:
specificheat.append((e1/steps/N - e0*e0/(steps*steps*N*N)) / (t * t))
susceptibility.append((m1/steps/N - m0*m0/(steps*steps*N*N)) / t)
( )
. t .
, () , . , . , , , , . , . - . ? - , () .
-, , , , , . 200 , 1000 .
.