Python 方格仔Ising模型模擬

2021-08-22 06:10:27 字數 3567 閱讀 5019

使用最簡單的逐點翻轉法逐點模擬

import time

import numpy as np

from numpy.random import rand

import matplotlib.pyplot as plt

def init_state(n):   

''' generates a random spin configuration for initial condition'''

# np.random.randint(2, size=(n,n)) 表示產生n*n隨機數,返回為列表

state = 2*np.random.randint(2, size=(n,n))-1

return state

def flipping(grid, beta):

'''monte carlo move using metropolis algorithm '''

n = len(grid)

for i in range(n):

for j in range(n):

# 產生0到n-1的隨機數

a = np.random.randint(0, n)

b = np.random.randint(0, n)

s = grid[a][b]

e = grid[(a+1)%n][b] + grid[a][(b+1)%n] + grid[(a-1)%n][b] + grid[a][(b-1)%n]

cost = 2*s*e

# 如果能量降低接受翻轉

if cost < 0:

s *= -1

# 在0到1產生隨機數,如果概率小於exp(-e/(kt))翻轉

elif rand() < np.exp(-cost*beta):

s *= -1

grid[a][b] = s

return grid

def calculate_energy(grid):

'''energy of a given configuration'''

energy = 0

n = len(grid)

for i in range(n):

for j in range(n):

s = grid[i][j]

e = grid[(i+1)%n][j] + grid[i][(j+1)%n] + grid[(i-1)%n][j] + grid[i][(j-1)%n]

# 負號來自哈密頓量

energy += -e*s

# 最近鄰4個格點

return energy/4

def calculate_magnetic(grid):

'''magnetization of a given configuration'''

mag = np.sum(grid)

return mag

引數設定

nt      = 2**8        # 溫度取點數量

n = 2**4 # 點陣尺寸, n x n

eqsteps = 2**10 # mc方法平衡步數

mcsteps = 2**10 # mc方法計算步數

energy = # 內能

magnetization = # 磁矩

specificheat = # 比熱容/溫度的漲落

susceptibility = # 磁化率/磁矩的漲落

t= np.linspace(1.2,3.8,nt)

t =list(t)

n1 = 1/mcsteps*n*n

n2 = 1/mcsteps**2*n*n

開始模擬

time_start=time.time()

j = 0

for t in t:

# 初始構型

e = 0 # 每一溫度下的能量

m = 0 # 每一溫度下的磁矩

cv = 0 # 每一溫度下的熱容

k = 0 # 每一溫度下的磁化率

config = init_state(n)

# 熱浴,達到平衡態

for i in range(eqsteps):

flipping(config, 1/t)

# 抽樣計算

for i in range(mcsteps):

flipping(config, 1/t)

e = calculate_energy(config)

m= calculate_magnetic(config)

e += e

m += m

cv += e*e

k += m*m

cv = (n1*cv - n2*e*e)/(t*t)

k = (n1*k - n2*m*m)/t

j +=1

if j%10==0:

print("已完成第%d步模擬" %j)

time_end=time.time()

print('totally cost',time_end-time_start)

處理畫圖

magnetization = np.array(magnetization)

f = plt.figure(figsize=(18, 10)); # plot the calculated values

sp = f.add_subplot(2, 2, 1 );

plt.plot(t, energy, 'o', color="red");

plt.xlabel("temperature (t)", fontsize=20);

plt.ylabel("energy ", fontsize=20);

sp = f.add_subplot(2, 2, 2 );

plt.plot(t, abs(magnetization), 'o', color="blue");

plt.xlabel("temperature (t)", fontsize=20);

plt.ylabel("magnetization ", fontsize=20);

sp = f.add_subplot(2, 2, 3 );

plt.plot(t, specificheat, 'o', color="red");

plt.xlabel("temperature (t)", fontsize=20);

plt.ylabel("specific heat ", fontsize=20);

sp = f.add_subplot(2, 2, 4 );

plt.plot(t, susceptibility, 'o', color="blue");

plt.xlabel("temperature (t)", fontsize=20);

plt.ylabel("susceptibility", fontsize=20);

Excel必備工具箱 方方格仔

今天無意間發現這個方方格仔,功能 小技巧挺多的,挺好玩的,特整理分享下 希望經常處理資料的朋友可以減少工作時間,提高效率。方方格仔excel工具箱技巧分享 方方格仔官網 方方格仔安裝指引 2 然後在官網裡點選 方方格仔工具箱 6 然後在解壓後的檔案中點選方方格仔的安裝程式 setup結尾 7 在安裝...

方方格仔access 有什麼好用的辦公軟體推薦?

辦公軟體有個人使用和團隊使用之分,個人使用的辦公軟體 it無憂 答主已經說得很全面了 往上翻 這裡我就不再贅述,我這裡給大家來聊一款團隊辦公協作的軟體。在進入到正題之前,我們先想另乙個問題,除了日程安排 請假考勤等一般性需求之外,企業日常辦公協需要解決的最大問題是什麼?有調查結果顯示,企業中普通員工...

數格仔算面積的方法 方格法計算面積 格仔與面積

例題 圖1是某廣告公司為某種商品設計的商標圖案,若圖中每個小正方形的面積都是l,則陰影部分的面積是 a 6 b 6.5 c 7 d 7.5 此題為某地中考試題,我們先不談題目的解答,而來聊一聊這個有點古怪的圖形。有這麼一類圖形,它們是由多邊形和乙個封閉的網格組成,並且。多邊形的所有頂點都在網格的橫 ...