磁振子 Magnon 的基本理论与能谱推导

Magnon 是什么

Magnon 中文通常称为磁振子。它是磁有序体系中自旋波的量子化激发。这个概念和声子的逻辑非常相似:声子是晶格振动的量子,magnon 是自旋集体振动的量子。在铁磁体中,基态可以近似看成所有局域磁矩沿同一方向排列。如果某个自旋稍微偏离平衡方向,这个扰动会通过交换相互作用传播到整个晶格中,形成自旋波。一个动量为 $\mathbf k$ 的自旋波模式量子化以后,就是一个动量为 $\mathbf k$ 的 magnon。

可以概括为

因此 magnon 不是单个局域自旋的简单翻转,而是一个在整个晶格上离域的集体激发。对铁磁体而言,一个 magnon 可以理解为一个离域的自旋降低激发。对反铁磁体而言,由于存在两个反向排列的子格,magnon 的结构更复杂,需要 Bogoliubov 变换才能得到真正的准粒子模式。

经典自旋波图像

考虑一个铁磁体,基态中所有自旋沿 $z$ 方向排列:

若某个自旋发生小的横向偏离,就可以用 $S_i^x$ 和 $S_i^y$ 描述。定义升降算符

如果横向扰动以波的形式传播,可以写成

这里 $\mathbf k$ 是自旋波波矢,$\omega(\mathbf k)$ 是自旋波频率。量子化后,这个模式对应一个玻色准粒子。其产生算符记为 $a_{\mathbf k}^\dagger$,作用在磁有序基态上得到单 magnon 态:

其中 $|0\rangle_{\rm mag}$ 是 magnon 真空,也就是理想磁有序基态。

最基本模型:Heisenberg 磁体

局域磁矩体系最常用的模型是 Heisenberg 模型:

这里 $\mathbf S_i$ 是格点 $i$ 上的自旋算符,$J_{ij}$ 是交换相互作用,$h=g\mu_BB$ 是外磁场对应的 Zeeman 能量。若只考虑最近邻交换,可写成

当 $J>0$ 时,相邻自旋倾向于平行排列,这是铁磁交换。铁磁基态为

当 $J<0$ 时,相邻自旋倾向于反平行排列。也常把反铁磁模型写成

此时基态是 Néel 反铁磁态。

铁磁体中的magnon

先考虑铁磁 Heisenberg 模型

铁磁基态是所有自旋向上排列。局域自旋翻转态可写为

但由于交换相互作用,这个局域翻转不是本征态。真正的本征态是 Bloch 叠加:

这个态表示一个自旋降低激发在整个晶格中传播。它就是一个单 magnon 态。对铁磁体而言,线性自旋波理论给出的单 magnon 结果与这个离域自旋翻转图像是一致的。


Holstein—Primakoff 变换

为了系统推导 magnon 能谱,需要把自旋算符映射成玻色算符。对铁磁基态,取量子化轴沿磁化方向。引入玻色算符 $a_i$ 和 $a_i^\dagger$,满足 $[a_i,a_j^\dagger]=\delta_{ij}$。Holstein—Primakoff 变换为

这个变换保持自旋代数,但形式是非线性的。物理意义很清楚:$a_i^\dagger a_i$ 是格点 $i$ 上的 magnon 数,每产生一个 magnon,$S_i^z$ 减少 $1$。因此铁磁体中的 magnon 携带相对于磁化方向的角动量 $-\hbar$。在低温或低激发密度下,magnon 数远小于最大自旋偏离,即 $a_i^\dagger a_i\ll 2S$。于是可以展开平方根:

线性自旋波理论只保留最低阶,得到

如果继续保留更高阶项,会得到 magnon—magnon 相互作用。下面先只讨论非相互作用的线性自旋波理论。

铁磁 magnon 能谱

从最近邻铁磁 Heisenberg 模型出发:

将自旋内积写成

在线性自旋波近似下,

横向项为

不同格点的玻色算符对易,因此 $a_i a_j^\dagger=a_j^\dagger a_i$。于是

代回哈密顿量,得到

其中基态能量为

这里 $N_b$ 是最近邻键数,$N$ 是格点数。若晶格配位数为 $z$,则 $N_b=Nz/2$。二次哈密顿量也可以写成更直观的形式:

这个式子说明,如果所有格点的横向偏离完全同相,即没有空间变化,那么交换能不增加;如果横向偏离随空间变化,就会付出交换能。

傅里叶变换与一般铁磁能谱

做傅里叶变换:

设最近邻矢量为 $\boldsymbol\delta$,则

跃迁项满足

定义结构因子

于是哈密顿量对角化为

其中

对具有反演对称的最近邻晶格,$\gamma_{\mathbf k}$ 是实数。这个式子就是最基本的铁磁 magnon 能谱。如果 $h=0$,则 $\gamma_{\mathbf 0}=1$,所以 $\omega_{\mathbf 0}=0$。这是连续自旋旋转对称性自发破缺导致的 Goldstone 模式。

一维铁磁链

一维最近邻铁磁链的模型为

格点间距为 $a$,最近邻矢量为 $\delta=\pm a$,配位数 $z=2$,所以

因此 magnon 能谱为

若 $h=0$,

长波极限 $ka\ll 1$ 下,$\cos ka\simeq 1-(ka)^2/2$,所以

这表明铁磁 magnon 在长波极限下是二次色散,即 $\omega_k\propto k^2$。

二维方格铁磁体

二维方格晶格最近邻矢量为 $\boldsymbol\delta=\pm a\hat x,\pm a\hat y$,配位数为 $z=4$。结构因子为

因此

也就是

在长波极限下,

于是

因此二维铁磁 magnon 在无外场时也是二次 Goldstone 模式。

各向异性的铁磁 magnon

真实磁体常常有自旋各向异性。最简单的易轴各向异性可以写为

当 $D>0$ 时,$z$ 方向是易轴。在线性自旋波近似下,

因此

所以各向异性会给 magnon 能谱增加一个能隙:

这说明理想各向同性 Heisenberg 铁磁体有无能隙 Goldstone 模式,但易轴各向异性会打开 magnon gap。

反铁磁 magnon

反铁磁体的自旋波稍微复杂,因为基态有两个反向排列的子格。考虑最近邻反铁磁 Heisenberg 模型:

对二分晶格,可以分成 $A$ 和 $B$ 两个子格。Néel 基态中 $A$ 子格自旋向上,$B$ 子格自旋向下。对 $A$ 子格使用通常的 Holstein—Primakoff 变换:

对 $B$ 子格,由于自旋方向相反,需要使用反向量子化轴:

对于一条连接 $A$ 和 $B$ 的最近邻键,有

纵向项为

横向项为

因此

代回哈密顿量:

这里出现了 $a_i b_j$ 和 $a_i^\dagger b_j^\dagger$,它们对应 magnon 成对湮灭和成对产生。因此反铁磁自旋波哈密顿量不是普通的粒子数守恒玻色哈密顿量,必须进行 Bogoliubov 对角化。

反铁磁体的 Bogoliubov 对角化

做傅里叶变换后,反铁磁二次哈密顿量可以写成

其中

为了对角化,引入 Bogoliubov 变换:

要求保持玻色对易关系,所以

通过选择合适的 $u_{\mathbf k}$ 和 $v_{\mathbf k}$,可以消去非对角的成对产生项,得到

反铁磁 magnon 能谱为

这里 $\alpha_{\mathbf k}$ 和 $\beta_{\mathbf k}$ 是两个反铁磁 magnon 分支。对简单共线反铁磁体,在没有各向异性和外场时它们通常是简并的。

二维方格反铁磁体

对二维方格反铁磁体,最近邻矢量为 $\pm a\hat x$ 和 $\pm a\hat y$,配位数为 $z=4$,结构因子为

因此

长波极限下,在 Néel 有序波矢附近展开,反铁磁 magnon 是线性色散:

这与铁磁 magnon 的 $\omega_{\mathbf k}\propto k^2$ 不同。差别来自铁磁体和反铁磁体的低能动力学不同:铁磁体中净磁化不为零,长波模式是二次的;反铁磁体中两个子格磁化抵消,低能自旋波表现为相对 Néel 矢量的振荡,通常是线性的。

铁磁与反铁磁 magnon 的对比

体系 基态 最小模型 长波色散
铁磁体 自旋平行排列 $-J\mathbf S_i\cdot\mathbf S_j$, $J>0$ $\omega_{\mathbf k}\propto k^2$
反铁磁体 两子格反平行排列 $J\mathbf S_i\cdot\mathbf S_j$, $J>0$ $\omega_{\mathbf k}\propto k$

铁磁 magnon 可以近似理解为一个自旋翻转在铁磁背景中传播。反铁磁 magnon 则是两个子格自旋的耦合集体振荡,其二次哈密顿量包含成对产生和湮灭项,因此需要 Bogoliubov 变换。

用 Python 绘制最简单的 magnon 能谱

下面给出一个简单 Python 程序,用来绘制一维铁磁链、二维方格铁磁体沿高对称路径的 magnon 能谱,以及二维方格反铁磁体的 magnon 能谱。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
import os
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import rcParams

# =========================================================
# 全局字体与样式设置
# =========================================================
plt.rcParams["font.family"] = "Times New Roman"
plt.rcParams['text.usetex'] = True # 需要系统安装 LaTeX
plt.rcParams["mathtext.fontset"] = "stix"
plt.rcParams["axes.linewidth"] = 1.5
plt.rcParams["xtick.direction"] = "in"
plt.rcParams["ytick.direction"] = "in"

# 全局字体大小
fs_axis_label = 20
fs_title = 20
fs_tick_label = 18
fs_legend = 18

# =========================================================
# 创建保存文件夹
# =========================================================
save_dir = "magnon_figures"
if not os.path.exists(save_dir):
os.makedirs(save_dir)

# =========================================================
# Parameters
# =========================================================
J = 1.0
S = 1.0
a = 1.0
h = 0.0
D = 0.0

# 自定义颜色
color_1d = "#2A6EBB" # 蓝色
color_2d_fm = "#D94E4E" # 红色
color_2d_afm = "#3A9D6A" # 绿色

# =========================================================
# 1D ferromagnetic chain
# omega(k) = h + 2JS(1 - cos ka)
# =========================================================
k = np.linspace(-np.pi, np.pi, 600)
omega_1d_fm = h + 2.0 * J * S * (1.0 - np.cos(k * a))

fig, ax = plt.subplots(figsize=(5, 4))
ax.plot(k / np.pi, omega_1d_fm, lw=2, color=color_1d)
ax.set_xlabel(r"$k/\pi$", fontsize=fs_axis_label)
ax.set_ylabel(r"$\hbar\omega_k$", fontsize=fs_axis_label)
ax.set_title("1D Ferromagnetic Magnon", fontsize=fs_title)

# 设置刻度数量
ax.xaxis.set_major_locator(plt.MaxNLocator(3))
ax.yaxis.set_major_locator(plt.MaxNLocator(3))
ax.tick_params(axis='both', labelsize=fs_tick_label)

plt.tight_layout()
plt.savefig(os.path.join(save_dir, "magnon_1d_fm.png"), dpi=300, bbox_inches='tight')
plt.show()

# =========================================================
# High-symmetry path for square lattice: Gamma-X-M-Gamma
# Gamma=(0,0), X=(pi,0), M=(pi,pi)
# =========================================================
def interpolate_path(points, n_per_segment=200):
kpts = []
xcoord = []
xticks = [0.0]
total = 0.0

for i in range(len(points) - 1):
start = np.array(points[i], dtype=float)
end = np.array(points[i + 1], dtype=float)

for j in range(n_per_segment):
t = j / n_per_segment
kpt = (1.0 - t) * start + t * end
if len(kpts) > 0:
total += np.linalg.norm(kpt - kpts[-1])
kpts.append(kpt)
xcoord.append(total)

xticks.append(total + np.linalg.norm(end - kpts[-1]))

kpts.append(np.array(points[-1], dtype=float))
total += np.linalg.norm(kpts[-1] - kpts[-2])
xcoord.append(total)
xticks[-1] = total

return np.array(kpts), np.array(xcoord), xticks

Gamma = (0.0, 0.0)
X = (np.pi, 0.0)
M = (np.pi, np.pi)

kpts, xcoord, xticks = interpolate_path([Gamma, X, M, Gamma], n_per_segment=200)
kx = kpts[:, 0]
ky = kpts[:, 1]

# =========================================================
# 2D square ferromagnet
# omega(k) = h + 2JS[2 - cos(kx a) - cos(ky a)]
# =========================================================
omega_2d_fm = h + 2.0 * J * S * (2.0 - np.cos(kx * a) - np.cos(ky * a))

fig, ax = plt.subplots(figsize=(5, 4))
ax.plot(xcoord, omega_2d_fm, lw=2, color=color_2d_fm)
for x in xticks:
ax.axvline(x, lw=0.8, ls="--", color='gray', alpha=0.7)
ax.set_xticks(xticks)
ax.set_xticklabels([r"$\Gamma$", r"$X$", r"$M$", r"$\Gamma$"], fontsize=fs_tick_label)
ax.set_ylabel(r"$\hbar\omega_{\mathbf{k}}$", fontsize=fs_axis_label)
ax.set_title("2D Square Ferromagnetic Magnon", fontsize=fs_title)

# 只对y轴设置刻度数量,x轴保留高对称点
ax.yaxis.set_major_locator(plt.MaxNLocator(3))
ax.tick_params(axis='both', labelsize=fs_tick_label)

plt.tight_layout()
plt.savefig(os.path.join(save_dir, "magnon_2d_square_fm.png"), dpi=300, bbox_inches='tight')
plt.show()

# =========================================================
# 2D square antiferromagnet
# omega(k) = 4JS sqrt(1 - gamma_k^2)
# gamma_k = [cos(kx a) + cos(ky a)] / 2
# =========================================================
gamma = 0.5 * (np.cos(kx * a) + np.cos(ky * a))
omega_2d_afm = 4.0 * J * S * np.sqrt(np.maximum(0.0, 1.0 - gamma**2))

fig, ax = plt.subplots(figsize=(5, 4))
ax.plot(xcoord, omega_2d_afm, lw=2, color=color_2d_afm)
for x in xticks:
ax.axvline(x, lw=0.8, ls="--", color='gray', alpha=0.7)
ax.set_xticks(xticks)
ax.set_xticklabels([r"$\Gamma$", r"$X$", r"$M$", r"$\Gamma$"], fontsize=fs_tick_label)
ax.set_ylabel(r"$\hbar\omega_{\mathbf{k}}$", fontsize=fs_axis_label)
ax.set_title("2D Square Antiferromagnetic Magnon", fontsize=fs_title)

# 只对y轴设置刻度数量
ax.yaxis.set_major_locator(plt.MaxNLocator(3))
ax.tick_params(axis='both', labelsize=fs_tick_label)

plt.tight_layout()
plt.savefig(os.path.join(save_dir, "magnon_2d_square_afm.png"), dpi=300, bbox_inches='tight')
plt.show()

print(f"所有图片已保存至文件夹: {save_dir}")

这个程序中取 $J=S=a=1$。如果想展示外场或各向异性打开的 gap,可以把 $h$ 或 $D$ 设为非零。

Image 1 Image 1 Image 1

总结

Magnon 是磁有序体系中自旋波的量子。对于铁磁体,最简单的图像是:一个局域自旋降低激发会由于交换相互作用在晶格中传播,形成动量为 $\mathbf k$ 的离域激发。用 Holstein—Primakoff 变换可以把自旋算符映射成玻色算符,在线性自旋波近似下得到自由 magnon 哈密顿量

对于最近邻铁磁 Heisenberg 模型,magnon 能谱为

在无外场、无各向异性的情况下,$\mathbf k=0$ 模式无能隙,这是自发破缺连续自旋旋转对称性带来的 Goldstone 模式。铁磁 magnon 的长波色散通常为 $\omega_{\mathbf k}\propto k^2$。对于反铁磁体,由于存在两个反向排列的子格,线性自旋波哈密顿量中会出现成对产生和湮灭项,因此需要 Bogoliubov 变换。二维方格反铁磁体的 magnon 能谱为

反铁磁 magnon 的长波色散通常为 $\omega_{\mathbf k}\propto |\mathbf k|$,这与铁磁 magnon 的二次色散形成鲜明区别。

鉴于该网站分享的大都是学习笔记,作者水平有限,若发现有问题可以发邮件给我

  • yxliphy@gmail.com

也非常欢迎喜欢分享的小伙伴投稿