一、什麼是伊辛模型
伊辛(Ising)模型是描述磁系統相變最簡單的模型,但模型裏自旋之間的相互作用賦予了它奇妙的特性,最有趣的就是對稱性破缺。這一模型可以被推廣用於研究連續的量子相變、基本粒子超弦理論、動力學臨界行爲等,甚至被認爲可以描述深林火災、交通擁堵、輿論傳播等社會經濟現象。
如圖,每個格點的方向只有向上或向下兩者狀態,但臨近的自旋之間有相互作用,而且點陣可以是一維、二維、三維、甚至更高維,這兩個特點讓伊辛模型的嚴格求解成爲了世紀難題。爲了定量描述這個系統的能量,我們假設第個格點的自旋爲,只能取+1或-1,如果相鄰兩個格點同方向,則它們相互作用的能量更小,設爲,如果爲反方向,則爲,稱爲耦合係數,通常爲正值,代表鐵磁系統,如果爲負值,則代表反鐵磁系統。如果外磁場的強度爲B,格點的自旋磁矩爲,那麼可以寫出這個體系的哈密頓量:
自發對稱性破缺
我們先定性地瞭解一下這個系統的性質,令外磁場零,當溫度時,體系爲了保持能量最低,所用的格點趨向於同方向,系統整體要麼向下,要麼向上,呈現強磁性。當溫度時,系統熱運動占主導地位,格點方向呈現隨機性,系統整體不帶磁性,從上或從下觀察體系,呈現出對稱性,或者說無法通過系統磁性區分上或下。現在再考慮,當溫度T從逐漸降溫,那麼系統必定存在某個溫度,高於此溫度時系統無磁性,低於此溫度時,系統磁性逐漸加強。這個溫度就是臨界溫度,也是相變點,系統從對稱磁體轉變爲非對稱磁體,而這就是對稱性破缺,因爲這種破缺不是外界擾動(如外加磁場)引起的,而是由內部的關聯作用力造成的,所以稱之爲自發的對稱性破缺。
上圖就是對自發對稱性破缺的定性描述,當逐漸降溫到時,系統磁性開始出現分化,要麼向下要麼向上,最終平均的磁化強度趨向於+1或-1。
我們感興趣的問題主要有兩個:第一,不同維度、不同分佈的格點,其臨界溫度是多少;第二,附近,隨溫度以什麼樣的冪指數趨近於:
統計物理的思路
我們先考慮簡單的9個格點的例子,實際格點數的量級爲。
假設格點耦合強度,那麼這個9格點體系的能量爲:
第一個格點有兩個相鄰格點,右邊的與其同向,耦合能爲-1,下面的與其反向,耦合能爲1;第二個格點有三個相鄰格點,左和下與其同向,耦合能爲-2,右邊與其反向,耦合能爲1。類似的可以計算其餘格點的耦合能。最後除以2是因爲每個相互作用重複計算了一次。而這一特定分佈以某概率P出現:
對於9個格點的體系,總共有種分佈,每種分佈的出現概率於其總能量有關,所以分佈概率滿足歸一化條件。給定不同溫度,我們可以計算出不同溫度下平均磁化率的數學期望,得到的曲線。
但是對於粒子爲量級的格點,可能的分佈有種,根本不可能統計出結果。
一維的情況可以通過數學上的處理,最終可以提出N,並得到,也就是說一維的伊辛模型不會有自發的對稱性破缺,這是因爲一維的格點只有兩個相鄰格點,相互作用太弱,不足以對抗熱運動,始終表現爲整體0磁化率的對稱狀態。
二維的情況下,如果用平均場近似的方法(具體可以參考林宗涵的熱力學與統計物理),基本思想是將相互作用的耦合能轉化爲外磁場強度,這就可以用近獨立的模型來計算配分函數,進而得到所有的統計量,獲得的臨界溫度爲 ,平均磁化率:
1944年,昂薩格推導出了二維伊辛模型的嚴格解,臨界溫度,平均磁化率:
二、二維伊辛模型的精確解
平均磁化率
這裏只列出二維伊辛模型精確解的結論,推導過於複雜,定義,則平均磁化率:
令可以解得:,令,小量泰勒展開化簡可以得到:
當時,容易得到結果爲1,表面所有的格點同向,平均磁化率爲1。
假設耦合強度等於1開爾文溫度下的熱運動能量,即,做出曲線如下:
平均能量和比熱
另一個能夠判斷相變的參數是比熱,這裏的表示單個格點的平均能量,定性來看,當溫度趨於0時,所有格點同向,,當溫度趨於無窮時,格點方向隨機,某格點四周平均有兩個同向和兩個方向,。其曲線如下(令):
這裏的比熱在臨界溫度時會突然增大,表面臨界溫度附近變化有個小溫度變化,需要吸收極大能量,這也很符合相變的特點。具體的計算公式和matlab代碼詳見附錄A。
雖然大體瞭解了相變的過程,以及理論上的精確解,我們能否通過實驗的方式,驗證這一結論呢?藉助計算機模擬這一過程來驗證結果呢?
三、二維伊辛模型模擬
因爲不可能遍歷所有的格點組合,我們只能利用採樣的方式去計算平均能量,採樣的條件應該是體系在某個溫度下已經平衡。 計算機模擬的基本思想是,首先隨機給定一種分佈,在特定溫度下,讓體系趨向平衡,再在這個平衡體系中採樣求平均。
- 假設體系有的格點,初始時同一分佈,相當於溫度很低;
- 我們設定一個希望“加熱”到的平衡溫度,接下來是模擬最關鍵的地方,如何改變格點的分佈以趨向於設定溫度?
1、我們先任意選擇一個格點,計算改變這個格點的能量變化,因爲體系出現的概率正比於,那麼格點變化前後兩個體系出現的概率比爲,或者說格點改變的概率與不改變的概率比爲:,那麼格點需要改變的概率爲,因此我們產生一個(0,1)概率隨機數,如果它小於則選擇改變格點;
2、重複1的步驟,直到體系相對平穩,這個過程稱爲馬爾可夫鏈,之後在平穩的體系下采樣若干次並做統計平均,獲得平均能量,平均磁化率,以及描述能量方差的比熱。
3、設定另一個希望考察的溫度,重複1、2步驟,獲得該溫度下的統計參數,並和理論值比較。
我們同樣假設,選取格點數爲。臨界溫度點附近,馬爾可夫鏈長取5萬次,採樣數爲25萬次;其他溫度點馬爾可夫鏈長1萬次,採樣數爲5萬次。這是因爲臨界溫度附近的漲落很大,需要更長的時間趨向平衡,需要更多的統計樣本獲得較準確平均值。詳細的代碼及解釋可以參看附錄B。
模擬平均磁化率
可以看出平均磁化率在臨界溫度附近很不穩定,這是因爲臨界相變時漲落很大的緣故,高溫時的磁化率不是嚴格的零,可能與格點數少和馬爾可夫鏈較短有關係,如何確定呢?通過平均磁化率求比較困難,一般是通過比熱發散的位置確定,參考下一部分。
選取T=1.7~2.2的16個數據點,擬合曲線:
得到,這和理論值相當接近。
模擬平均能量
在臨界溫度附近進行了較密集的溫度取點,而且加長了馬爾可夫鏈,但是仍能看到較大的漲落,可以通過這個現象來確定臨界溫度。
最後,讓我們欣賞一下格點從同一分佈到臨界溫度的變化過程吧,爲了便於觀察,選擇40X40的格點,馬爾可夫鏈長爲1萬:
初始同一分佈的格點,逐漸趨向於高溫下的平衡態,格點最後呈現隨機分佈:
初始同一分佈的格點,溫度降低至的平衡態,格點最後呈現小塊狀:
初始無序分佈的格點,溫度降低到臨界溫度時,格點最後呈現的塊狀增大。
初始無序分佈的格點,溫度降低到臨界溫度以下,格點最後呈現的大的塊狀,說明已經發生了明顯的相變。
初始無序分佈的格點,溫度降低更多至,格點越來越趨向於同一分佈。
附錄
A、平均能量和比熱的精確解:(前方高能)
定義
帝國主義都是紙老虎,我們仔細發現,只要確定了溫度或,那麼可以依次確定,也就是平均能量和溫度是一一對應的,最後通過求導得到比熱。
%matlab code
clear;clc;
beta=0.1:0.01:1; %溫度從10到1
for i=1:1:size(beta,2);%遍歷beta
lambda=2.*sinh(2.*beta(i))./cosh(2.*beta(i)).^2;%計算lambda
phi=linspace(0,pi/2,1000);%求B的積分參數
b=1./sqrt(1-lambda.^2.*sin(phi).^2);
B=trapz(phi,b);%積分B(lambda)
A=2*tanh(2.*beta(i)).^2-1;
e_bar(i)=-coth(2.*beta(i)).*(1+2/pi.*A.*B); %每個格點的平均能量
end
%%
plot(1./beta,e_bar,'k','LineWidth',2);hold on;%E-T曲線
beta1=beta(2:end)/2+beta(1:end-1)/2;
cv=-beta1.^2.*diff(e_bar)./diff(beta); %對能量求導得到比熱
plot(1./beta1,cv,'r','LineWidth',2);
B、蒙特卡洛馬爾可夫鏈模擬二維伊辛模型相變過程
具體細節詳見代碼:
%matlab code
clear;clc;
n=10000; %馬爾可夫鏈長度1萬
ns=20; %20*20的格點
beta_mc=(0.1:0.01:0.4); %溫度從10到2.5,鏈長1萬,樣品長5萬
%T_mc=(2.1:0.01:2.4); %第三批模擬溫度設定,臨界溫度附近取點更密集,還要調整n=50000
%beta_mc=1./T_mc;
tic; %計時用,n=10000時,通常需要跑一分多鐘
for jj=1:1:size(beta_mc,2)
X=sign(rand(ns,ns)); %所有格點方向一致,相當於從0度開始升溫
%馬爾可夫鏈長度爲5萬次
for j=1:1:n
%隨機選取一個格點,行列存儲在index[1,2]
index=unidrnd(ns,1,2);
% 利用週期性邊界條件,分別計算格點上下左右四個點行列座標
tmp1=rem(index(1),ns)+1;tmp2=rem(index(1)+1,ns)+1;tmp3=rem(index(1)-1,ns)+1;
tmp4=rem(index(2),ns)+1;tmp5=rem(index(2)+1,ns)+1;tmp6=rem(index(2)-1,ns)+1;
% 計算改變格點方向後的能量變化
cen=X(tmp1,tmp4);right=X(tmp1,tmp5);left=X(tmp1,tmp6);
up= X(tmp2,tmp4);down= X(tmp3,tmp4);
deE=2*cen*(right+left+up+down);
% 判斷是否改變格點
if rand<exp(-deE*beta_mc(jj))
X(tmp1,tmp4)=-X(tmp1,tmp4);
end
end
% 取樣5萬次,平衡時同樣需要判斷是否改變格點
for j=1:1:5*n
index=unidrnd(ns,1,2);
% 利用週期性邊界條件,分別計算格點上下左右四個點行列座標
tmp1=rem(index(1),ns)+1;tmp2=rem(index(1)+1,ns)+1;tmp3=rem(index(1)-1,ns)+1;
tmp4=rem(index(2),ns)+1;tmp5=rem(index(2)+1,ns)+1;tmp6=rem(index(2)-1,ns)+1;
% 計算改變格點方向後的能量變化
cen=X(tmp1,tmp4);right=X(tmp1,tmp5);left=X(tmp1,tmp6);
up= X(tmp2,tmp4);down= X(tmp3,tmp4);
deE=2*cen*(right+left+up+down);
% 判斷是否改變格點
if rand<exp(-deE*beta_mc(jj))
X(tmp1,tmp4)=-X(tmp1,tmp4);
end
%計算一種特定分佈時的平均磁化率
m(j)=abs(mean(mean(X)));
%計算一種特定分佈時的平均能量
Xt1=X;Xt1(1,:)=[];Xt1=[Xt1; X(1,:)];
Xt2=X;Xt2(:,1)=[];Xt2=[Xt2, X(:,1)];
e(j)=-mean(mean(X.*Xt1+X.*Xt2));
end
% 特定溫度下的統計量
m_bar(jj)=mean(m);
e_bar(jj)=mean(e);
cv_bar(jj)=beta_mc(jj)^2*ns^2*std(e)^2;
end
toc;
% 作圖觀察
figure(1);
plot(1./beta_mc,m_bar,'ko');
figure(2);
plot(1./beta_mc,e_bar,'ko');
figure(3);
plot(1./beta_mc,cv_bar,'ro');
20X20格點,從同一分佈開始升溫,分佈進行了三批溫度選擇:
- 31個溫度點,馬爾可夫鏈長度爲1萬次,採樣5萬次。
- 21個溫度點,$馬爾可夫鏈長度爲1萬次,採樣5萬次。
- 31個溫度點,馬爾可夫鏈長度爲5萬次,採樣25萬次。