Ising模型是描述一种描述磁体的模型。它假定磁体是由一个立方体网格构成,每个格点 sis_i 上存在一个朝上或者朝下的磁偶极子,我们可以用下图中用小箭头表示。进一步地,模型假定只有最近邻格点之前存在相互作用并且这些相互作用有着相同的强度 JJ 。那么,令 sis_i 取值为 ±1\pm1 代表箭头方向,并考虑外部存在一个匀强磁场 BB ,我们便可以写出该模型的哈密顿量:
(1)H=−J∑⟨ij⟩sisj−B∑isiH=-J\sum_{\langle ij\rangle}s_is_j-B\sum_i s_i \tag{1} 其中 ⟨ij⟩\langle ij\rangle 代表我们对所有最近邻的格点对(也就是下图中网格的所有边)求和。 J<0J<0 时,相邻格点的箭头指向更倾向于一致,此时模型描述一种铁磁性的磁体。
对于包含 NN 个格点的Ising模型,我们对其 2N2^N 个状态进行遍历便可以得到配分函数:
(2)Z=∑s1=±1∑s2=±1⋯∑sN=±1exp[βJ∑⟨ij⟩sisj+βB∑isi]Z=\sum_{s_1=\pm1}\sum_{s_2=\pm1} \cdots \sum_{s_N=\pm1}\exp[\beta J\sum_{\langle ij\rangle}s_is_j+\beta B\sum_i s_i] \tag{2}有了配分函数,我们很容易就能求得Ising模型的热力学量。例如自由能F=−kTlogZF=-kT\log Z,比热容 C=kβ2∂2logZ∂βC=k\beta^2\frac{\partial^2\log Z}{\partial \beta} ,磁化强度 M=∂F∂BM=\frac{\partial F}{\partial B} 。
二维Ising模型有严格解,因此在介绍数值方法求解Ising模型之前,我们先来偷看一下答案。由于求比热容需要求自由能的二阶导,因此我在代码中顺便尝试了jax的autodiff看看效果。(总体上是能给出正确的结果,但是速度不是很快,并且在温度趋于0附近时似乎梯度计算出现了问题。)
我们可以明显地看到在临界温度附近比热容出现了发散的现象,磁化强度也发生了突变。这是一个很明显的相变现象。
转自知乎