本页面总结自旋液体相关的知识.

为什么需要伊辛模型、海森堡模型、t-J 模型等一系列模型? - Physhan的回答 - 知乎

Ising Model

在晶格中, 每个 site 的原子磁矩可以取 $\pm 1$, 只考虑最近邻的原子相互作用.

根据以上假设就有

$$ \hat{H} = \sum_{\langle ij\rangle}J_{ij}\sigma_{i}\sigma_{j} $$

这个模型被提出的时候, 人们还没有意识到 $\sigma_{i}$ 的严格定义, 只知道是 site 上有着某种内禀的磁矩.

数值模拟

Monte Carlo Method 计算 2D Ising Model 磁偶极矩和比热

$$ \mathcal{H} = -J\sum_{\langle ij\rangle}^{N}s_{i}s_{j},\quad s_{i} = \pm 1, \forall i = 1,2,\dots,N\\ \langle m^{2}\rangle = \frac{1}{N^{2}}\left\langle\left(\sum_{i}s_{i}\right)^{2}\right\rangle, C = \frac{\langle\mathcal{H}^{2}\rangle - \langle\mathcal{H}\rangle^{2}}{Nk_{B}T^{2}} $$

对于三种不同尺寸 $L = 8,12,16$ 的 2D 正方格子, 采用周期化边界条件, 计算 $m^{2}$ 和比热 $C$ 随着温度 $T$ 在 $(1,3)$ 内的变化曲线, 取步长 $\Delta T = 0.05$. 为了方便计算, 取常数 $J = 1$.

Metropolis Algorithm

该算法应用在蒙特卡洛算法中, 用来判断一次随机自旋翻转是否会被保留.

我们随机选择一个位置 $(i,j)$, 令其自旋翻转, 从而使体系产生了能量差 $\Delta E$. 那么我们需要使用 Metropolis 函数计算出判定数 $p$:

$$ p = \begin{cases} 1,\quad\Delta E \leq 0\\ e^{-\frac{\Delta E}{k_{B}T}}, \quad\Delta E > 0 \end{cases} $$

在计算中, 我们通常取 $k_{B} = 1$.

然后令 $p$ 与 $[0,1]$ 中的随机数 $z$ 比较, 若 $z < p$, 则保留该翻转, 否则不保留. 接下来我们要做的就是计算并且记录这一轮次的相关数据, 然后继续下一轮的随机翻转.

将足够多轮次的数据进行平均, 我们就可以得到近似的期望值.

Reference
clear;clc;
Ls=[8,12,16];
dT=0.025;
Tspan=1:dT:3;

%生成随机初始条件的自旋矩阵
N=6e6;%计算次数
L_m2=zeros(3,length(Tspan));L_C=L_m2;%分配数据位置
for ii=1:3
    %确认2D正方格子尺寸
    L=Ls(ii);

    %生成随机磁矩矩阵
    M=randi([0,1],L,L)*2-1;

    %分配数据记录位置
    m2_T=zeros(1,length(Tspan));H2_T=m2_T;H1_T=m2_T;
    
    %以温度遍历计算
    for Tn=1:length(Tspan)
        %当前轮次的温度
        T=Tspan(Tn);
        
        %分配数据位置
        m2_s=[];H2_s=[];H1_s=[];

        %
        for nn=1:N
            %保留磁矩矩阵的原信息
            M_1=M;

            %随机翻转自旋的坐标
            loc=randi([1,L],1,2);
            x=loc(1);y=loc(2);

            %翻转后的磁矩矩阵
            M_2=M;M_2(x,y)=-M_1(x,y);
            
            %计算能量差
            %pud是指利用周期性边界条件,将矩阵边界进行扩展,便于计算边界时的能量差
            pudM=pud(M);

            %计算能量差仅需比较最近邻格点
            deltaE=2*M_1(x,y)*(pudM(x+2,y+1)+pudM(x,y+1)+pudM(x+1,y+2)+pudM(x+1,y));

            %使用Metropolis算法判断状态是否保留
            flag=Metro(deltaE,T);
            if flag==1
                M=M_2;
            else
                M=M_1;
            end

            %计算当前时刻的各物理量,记录下来以进行时间平均
            m2=(sum(M(:))^2)/(L^4);
            H1=H(M);
            H2=H1^2;
            m2_s(end+1)=m2;
            H2_s(end+1)=H2;
            H1_s(end+1)=H1;
        end

        %计算m^2,H^2,H在T=Tspan(Tn)下的期望值
        l=length(m2_s);
        m2_s_avg_Tn=sum(m2_s)/l;
        H2_s_avg_Tn=sum(H2_s)/l;
        H1_s_avg_Tn=sum(H1_s)/l;
        
        %将上述数值记录在提前分配的内存中,以方便进行下一步计算
        m2_T(Tn)=m2_s_avg_Tn;
        H2_T(Tn)=H2_s_avg_Tn;
        H1_T(Tn)=H1_s_avg_Tn;
        
        %显示当前计算进度
        disp("任务数为"+ii+"/3,已完成第"+Tn+"轮计算,进度为"+Tn/length(Tspan)*100+"%")
    end

    %将当前尺寸下的数据记录在提前分配的内存中,以方便进行下一步计算
    L_m2(ii,:)=m2_T;
    L_C(ii,:)=(H2_T-H1_T.^2)./(L^2*Tspan.^2);
end

%绘制m^{2}随温度变化的图像
figure(1)
plot(Tspan,L_m2(1,:),'r',Tspan,L_m2(2,:),'k',Tspan,L_m2(3,:),'b')
xlabel('Temperature');ylabel('<m^2>');
legend("L=8","L=12","L=16");

%绘制C随温度变化的图像
figure(2)
plot(Tspan,L_C(1,:),'r',Tspan,L_C(2,:),'k',Tspan,L_C(3,:),'b')
xlabel('Temperature');ylabel('C');
legend("L=8","L=12","L=16");

%%
%Metropolis算法函数的定义
function flag=Metro(deltaE,T)
    beta=1/T;
    if deltaE<=0
        p=1;
    else
        p=exp(-beta*deltaE);
    end
    
    z=rand();
    if z<p
       flag=1;
    else
        flag=0;
    end
end

%%
%Pud,辅助计算。输出(L+2)**2的矩阵
function pudM=pud(M)
L=size(M,1);
pudM=zeros(L+2,L+2);%分配储存空间
%pudding, 采用周期性边界条件
pudM(2:(L+1),2:(L+1))=M;

%行的移动
pudM(1,2:(L+1))=M(L,:);
pudM(L+2,2:(L+1))=M(1,:);

%列的移动
pudM(2:(L+1),1)=M(:,L);
pudM(2:(L+1),L+2)=M(:,1);
end

%能量计算. 利用哈密顿量的定义求和计算.
function E=H(M)
L=size(M,1);
pudM=pud(M);
H=0;
for i=2:L
    for j=2:L
        H=H-pudM(i,j)*(pudM(i,j-1)+pudM(i,j+1)+pudM(i-1,j)+pudM(i+1,j));
    end
end
E=H/2;
end

对角化 1D 量子多体系统的哈密顿量

$$ \begin{aligned} \hat{H} &= \sum_{i = 1}^{L - 1}-\hat{\sigma}^{z}_{i}\hat{\sigma}_{i+1}^{z} - \hat{\sigma}^{z}_{L}\hat{\sigma}^{z}_{1} + h\sum_{i = 1}^{L}\hat{\sigma}_{i}^{x}\\ \hat{\sigma}_{i}^{z}\hat{\sigma}_{j}^{z} &= I \otimes I \dots \sigma^{z}\otimes \dots \sigma^{z} \otimes\dots I\\ \hat{\sigma}_{i}^{x} &= I \otimes I \dots \sigma^{x} \otimes \dots \otimes I \end{aligned} $$

使用周期化边界条件, 并且引入了磁场 $h$ 的影响.

$L = 10, h = 0.5, 1.0, 2.0$.

  1. 对角化哈密顿量矩阵 $\hat{H}$, 求解基态能量和第一激发态能量;

  2. 计算基态下的 $\langle \sigma_{1}^{x}\rangle$;

  3. 设 $t = 0$ 时系统处于 $h = 0.5$ 的基态, $t>0$ 使 $h$ 突变为 $h = 3$, 求在新哈密顿量 $\hat{H}’$ 下 $\langle \sigma_{1}^{x}(t)\rangle$ 在 $t\in (0,10)$ 的时间演化.

Reference
clear;clc;
L=10;

%不同磁场
h=[1/2,1,2];

%计算不同h下的基态能量和第一激发态
%分配内存空间储存不同磁场下的
he1e2=zeros(length(h),3);
for n=1:length(h)
    %对磁场参数进行赋值
    hn=h(n);

    %代入初始参数, 计算哈密顿量
    H=G(hn,L);

    %使用matlab内置函数计算 H 本征值并且完成排序
    En=unique(eig(H));
    disp("h="+hn+"时,基态能量为"+En(1,1)+",第一激发态为"+En(2,1))
    
    %将本轮次的数据填入预留的内存空间
    he1e2(n,1)=hn;he1e2(n,2)=En(1,1);he1e2(n,3)=En(2,1);
end

%计算基态的sigma_{1}^x的期望值
%在指令行分割数据展示
disp("-------------------------------------------------")

%预留存储空间
sigma1x_s=zeros(1,length(h));
for n=1:length(h)
    hn=h(n);
    H=G(hn,L);

    %V是特征值的对角矩阵,D使得H=DVD^(-1)
    %易知D是特征向量(列向量)组成的矩阵
    [V,D]=eig(H);
    
    %D的第一个列向量即为基态波函数
    psi0=V(:,1);

    %计算sigma_{1}^x的期望值
    sigma1x=psi0'*Sigmax(1,L)*psi0;
    
    %将本轮次的sigma_{1}^{x} 记录到预留的内存空间中
    sigma1x_s(n)=sigma1x;
    disp("h="+hn+"时, sigma_{1}^x的期望值是"+ sigma1x)
end

%%
%t=0时系统处在h=0.5的基态, t>0时h=3, 求哈密顿量的时间演化.
%分割命令行区数据展示
disp("-------------------------------------------------")

%时间范围
tspan=0:0.1:10;

%计算h=0.5下的初态波函数
h=0.5;H=G(h,L);[~,D]=eig(H);psi0=V(:,1);

%计算h=3.0下的哈密顿量
h=3;H=G(h,L);

%分配记录含时 sigma_{1}^{x}(t) 的内存空间
sigma1x_t=zeros(1,length(tspan));

%遍历计算 sigma_{1}^{x}(t_{0})
for n=1:length(tspan)
    % 取 t 值
    t=tspan(n);

    % 含时演化
    psi=expm(-1i*H*t)*psi0;
    
    % 计算内积得到期望值
    sigma1x=conj(psi.')*Sigmax(1,L)*psi;
    
    % 记录当前时刻 t_{0} 的 sigma_{1}^{x}(t_{0})
    sigma1x_t(n)=sigma1x;
    
    % 清理命令行显示区
    clc;
    disp("已完成计算进度"+n/length(tspan)*100+"%")
end
plot(tspan,sigma1x_t,'k')
xlabel("Time")
ylabel("<\sigma_{1}^x>")

%%
%定义H的生成函数
function H=G(h,L)
    H=0;
    for i=1:L-1
        H=H-Sigmaz(i,i+1,L)+h*Sigmax(i,L);
    end
    H=H-Sigmaz(L,1,L)+h*Sigmax(L,L);
end

%生成单一的\hat{sigma}_{i}^z\hat{sigma}_{j}^z元素,未求和
function sigmaz=Sigmaz(i,j,L)
    %定义z泡利矩阵
    sigmaZ=[1,0;0,-1];
    
    %初始化内存空间
    s=1;
    for n=1:L
        if n==i||n==j
            %kron(A,B)产生 A 和 B 的 Kronecker 张量积
            s=kron(s,sigmaZ);
        else
            %eye(n)产生 n 阶单位矩阵
            s=kron(s,eye(2));
        end
    end
    
    %返回张量连乘积结果
    sigmaz=s;
end

%生成单一的\hat{sigma}_{i}^x元素, 未求和
function sigmax=Sigmax(i,L)
    %定义x泡利矩阵
    sigmaX=[0,1;1,0];

    % 初始化内存空间
    s=1;
    for n=1:L
        if n==i
            s=kron(s,sigmaX);
        else
            s=kron(s,eye(2));
        end
    end
    sigmax=s;
end

Heisenberg Model

只考虑最近邻的相互作用, 且呈现各向同性.

$$ \hat{H} = J\sum_{\langle i,j\rangle}\hat{S}_{i}\cdot\hat{S}_{j} = J\sum_{\langle i,j\rangle}\left(S_{i}^{x}S_{j}^{x} + S_{i}^{y}S_{j}^{y} + S_{i}^{z}S_{j}^{z}\right) $$

相比于之前的 Ising Model, 变化在于真正引入了电子自旋 $\hat{S}_{i}$. 根据不同的情景有着不同的变种.

  1. 各向异性

$$ \hat{H} = J_{x}\sum_{\langle i,j\rangle}S_{i}^{x}S_{j}^{x} + J_{y}\sum_{\langle i,j\rangle}S_{i}^{y}S_{j}^{y} + J_{z}\sum_{\langle i,j\rangle}S_{i}^{z}S_{j}^{z} $$

  1. XXZ Model.

即 $J_{x} = J_{y} \neq J_{z}$. 一维下的半自旋 XXZ Model 可以使用 Bethe Ansatz 进行严格求解.

  1. 单离子各向异性

磁矩(或者自旋)大于 $\frac{1}{2}$, 此时哈密顿量形式变为

$$ \hat{H} = D(S^{z})^{2} + E[(S^{x})^{2} - (S^{y})^{2}] $$

$D$ 和 $E$ 分别指的是单轴的单离子各向异性和菱形的单离子各向异性.

  1. 强各向异性

考虑两个 site 之间原子的各向异性交换(Anisotropic exchange), 会出现另一种各向异性. 此时哈密顿量形式变为

$$ \hat{H} = \sum_{\alpha,\beta}J^{\alpha,\beta}S^{\alpha}S^{\beta} $$


所以在磁性材料中, 理想模型会写作 XXZ Model $\oplus$ 单离子各向异性:

$$ \hat{H} = \sum_{\langle i,j\rangle}(S_{i}^{x}S_{j}^{x} + S_{i}^{y}S_{j}^{y} + \Delta S_{i}^{z}S_{j}^{z}) + D\sum_{j}(S_{j}^{z})^{2} + E\sum_{j}[(S_{j}^{x})^{2} - (S_{j}^{y})^{2}] $$

$\Delta = 1, D = E = 0$ 时模型即退化为各向同性的 Heisenberg Model.

升降算符

引入升降算符

$$ S^{\pm} = S^{x} \pm iS^{y} $$

原哈密顿量就可以改写为

$$ \hat{H} = J\sum_{i}\left(\frac{1}{2}\left(S_{i}^{+}S_{i+1}^{-} + S_{i}^{-}S_{i + 1}^{+}\right) + S_{i}^{z}S_{i+1}^{z}\right) $$

基态

如果模型处于铁磁性, 考虑系统处于基态, 不妨设所有原子的自旋方向都是 $\uparrow$, 则基态波函数可以写作

$$ \psi_{g} = |\uparrow\uparrow\uparrow\dots\rangle $$

因为是基态, 所以我们可以得到

$$ S_{i}^{+}S_{i+1}^{-}\psi_{g} = 0\\ S_{i}^{-}S_{i+1}^{+}\psi_{g} = 0 $$

所以我们只需要关心剩余的

$$ S_{i}^{z}S_{i+1}^{z}\psi_{g} = \frac{\hbar^{2}}{4}\psi_{g} $$

因此就能得到

$$ \hat{H}\psi_{g} = J\hbar^{2}\frac{L}{4}\psi_{g}\Rightarrow E_{g} = J\hbar^{2}\frac{L}{4} $$

自旋倒向

设基态 $\psi_{g}$ 第 $n$ 个自旋倒向, 那么形成的波函数为

$$ \psi_{n} = |\uparrow\uparrow\uparrow\dots\overbrace{\downarrow}^{n_{\text{th}}}\dots\uparrow\rangle $$

即有

$$ \hat{H}\psi_{n} = \frac{J}{4}[(L - 4)\psi_{n} + 2\psi_{n - 1} + \psi_{n + 1}] $$

这并不满足特征方程所需要的 $\hat{H}\psi_{n} = E_{n}\psi_{n}$ 的形式, 所以按照上述方式构造出来的 $\psi_{n}$ 一定不是 $\hat{H}$ 的本征态.

我们可以引入 $\psi_{f}$, 并且要求该波函数在 $\{\psi_{n}\}$ 所张成的空间中:

$$ \psi_{f} = \sum_{n}c_{n}\psi_{n} $$

若 $\psi_{f}$ 是 $\hat{H}$ 的本征态, 那么就有

$$ \hat{H}\psi_{f} = \frac{J}{4}\sum_{n}[(L - 4)c_{n}\psi_{n} + 2c_{n - 1}\psi_{n - 1} + 2c_{n + 1}\psi_{n + 1}] = E_{f}\sum_{n}c_{n}\psi_{n} $$

两边都有求和符号, 为了简化方程, 可以令等式两边都对 $\psi_{m}^{*}$ 作内积:

$$ \frac{L}{4}[(L - 4)c_{m} + 2c_{m - 1} + 2c_{m + 1}] = E_{f}c_{m} $$

这是一个线性方程, 可以解得

$$ c_{n} = \frac{1}{\sqrt{L}}e^{ikna} $$

所以本征态为

$$ \psi_{f} = \frac{1}{\sqrt{L}}\sum_{n}\psi_{n}e^{ikna} $$

对应的本征值为

$$ E_{f} = J\hbar^{2}\frac{L}{4} - J\hbar^{2}(1 - \cos{ka}) $$

Hubbard Model

动能项: 描述粒子从一个 site 隧穿到最近邻的 site;

势能项: 描述晶格中, 每个 site 上不同自旋粒子之间的相互作用.

$$ \hat{H} = -t\sum_{i,\sigma}\left(\hat{c}^{\dagger}_{i,\sigma}\hat{c}_{i + 1,\sigma} + \hat{c}^{\dagger}_{i+ 1,\sigma}\hat{c}_{i,\sigma}\right) + U\sum_{i}\hat{n}_{i,\uparrow}\hat{n}_{i,\downarrow} $$

这是最简单的强关联模型, 因为是最简单的相互作用电子体系. 同样地, 根据不同的背景可以产生众多的变式, 比如 Extended Hubbard Model(考虑相邻 site 之间电子的相互作用), Fermi-Hubbard Model 和 Bose-Hubbard Model 等.

t-J Model

推广自 Hubbard Model.

$$ \hat{H} = -t\sum_{\langle ij\rangle,\sigma}\hat{a}^{\dagger}_{i\sigma}\hat{a}_{j\sigma} + J\sum_{\langle ij\rangle}\left(\hat{S}_{i}\cdot\hat{S}_{j} - \frac{n_{i}n_{j}}{4}\right) $$