2024.2.28 update

本篇包含以$S=1/2$ Heisenberg Model举例的SSE入门教程和Sandvik所给出的教学代码的讲解。

2024.4.14 update

一些typo更正和补充测量部分

ps: 这篇是我刚开始学SSE的时候写的,有时候可能包含一些自己冗余的思考过程也写下来了,后续在我有精力和时间的条件下我会持续维护本篇教程直到我自己彻底满意。如果你比较急切地想搞明白其中的一些细节,最好通过直接联系我的方式询问.

2024.11.21 update

更新一些结构流程图使得初学者更容易快速抓住代码的结构,更改了一些语句使得读者更容易读懂,加上了能量和截断的推导,虽然这个在我的Github上早就有了。


量子系统被映射到一个具有额外虚时间维度的经典系统上. 因此我们将经典位型在虚时间上的演化进行采样

一句话概括:

什么是SSE(随机级数展开)方法?

$$ \begin{align*}e^{-\beta H}& = \sum {n=0}^\infty \frac{\beta^n}{n!}(-H)^n \ \ \ \gets (\text{Taylor expands} ) \\ \\Z =& \mathbf{Tr} [e^{-\beta H}] \\ =& \mathbf{Tr}[\sum_n \frac{\beta^n}{n!}(-H)^n] \\ =&\sum\alpha \sum {n=0}^\infty \frac{\beta^n}{n!}\bra{\alpha} (-H)^n \ket{\alpha} \\ =& \sum\alpha \sum {n=0}^\infty \frac{\beta^n}{n!}\bra{\alpha} (-H)(-H)(-H)(-H)...(\text{many}\ H)...(-H)(-H)(-H) \ket{\alpha} \\ =& \sum\alpha \sum {n=0}^\infty \frac{\beta^n}{n!}\bra{\alpha_0} (-H)\ket{\alpha_1} \bra{\alpha_1}(-H)\ket{\alpha_2}\bra{\alpha_2}(-H)\ket{\alpha_3}...\bra{\alpha{n-1}} (-H) \ket{\alpha_n} \\ \overset{\text{cut off}}{\rightarrow}&\sum_\alpha \sum {n=0}^M \frac{\beta^n}{n!}\bra{\alpha_0} (-H)\ket{\alpha_1} \bra{\alpha_1}(-H)\ket{\alpha_2}\bra{\alpha_2}(-H)\ket{\alpha_3}...\bra{\alpha{M-1}}(- H) \ket{\alpha_M} \\ =& \sum_{p=0}^M \sum {n=0}^M \frac{\beta^n}{n!}\bra{\alpha{p-1}} (-H)\ket{\alpha_p}\end{align*} $$

首先需要对配分函数进行幂级数分解,或者说是把e指数进行泰勒展开成n项(这里的n与后文我们用n来表示非单位算符的数目最好不要混淆,否则会很容易搞不清楚截断M的含义,仅在这里出现的 $n$ 是泰勒展开的级数). 推导过程中不难看出,Trace 可以在任意basis中做都是不变的,因此我们利用了:

$$ \mathbf{Tr} H = \sum_\alpha \langle \alpha |H| \alpha \rangle $$

然后我们在虚时间上插入多个basis states使得一个态只能经由一个操作算符变到另一个态,每个态作为前一个态的投影:$\ket{\alpha_p} = H\ket{\alpha_{p-1}}$. 这样,哈密顿算符矩阵被定义在离散虚空间和实空间构成的广义空间上(d+1维). 我们做的一个事情其实是在这样一个d+1维的空间里sample。

传统的MC思想是真实相空间里的sample。还记得热统里“一段时间内抛50次硬币→同一时间内50个人抛硬币”的思想吗?我们sampling configurations (这些configurations将在代码的循环迭代里形成) 其实就是后者:sample 相空间里“迭代”位置的configuration