2维SSH模型的拓扑角态的matlab代码,运行出的结果类似这种。不太懂的地方是二维的哈密顿量矩阵是用张量积构成的,他和实空间的原胞位置是怎样对应的。

2维SSH模型的拓扑角态的matlab代码,运行出的结果类似这种。不太懂的地方是二维的哈密顿量矩阵是用张量积构成的,他和实空间的原胞位置是怎样对应的。

关注引自免费微信小程序:皆我百晓生
在MATLAB中实现2D SSH(Su-Schrieffer-Heeger)模型的角动量计算,首先我们需要定义SSH模型的哈密顿量。SSH模型是一个一维周期性的链,每个单元格有两个原子(A和B)。在二维情况下,我们可以将这个链扩展到两个维度,形成一个网格,其中每个网格点由A和B两种类型的原子组成。
二维SSH模型的哈密顿量可以表示为张量积的形式,即H = H_x kron I_y + I_x kron H_y,其中kron代表张量积,H_x和H_y分别是一维SSH模型在x和y方向上的哈密顿量,而I_x和I_y是相应方向上的单位矩阵。
对于一维SSH模型,其哈密顿量通常采用以下形式(以紧束缚模型为例):
[
H_x(k) = \begin{pmatrix}
0 & t_1 - te^{ik} \
t_1 - te^{-ik} & 0
\end{pmatrix},
]
其中t1是相邻同种原子之间的键合强度,t是相邻异种原子之间的键合强度,k是动量量子数。
接下来,我们将展示如何在MATLAB中构建并求解二维SSH模型的哈密顿量,并计算其角动量。
% 定义参数
t1 = 1; % 同种原子间的键合强度
t = 0.5; % 异种原子间的键合强度
Lx = 4; % x方向的周期数
Ly = 3; % y方向的周期数
% 计算总的动量量子数数量
Nkx = Lx * 2 * pi / (2 * pi); % kx的数量
Nky = Ly * 2 * pi / (2 * pi); % ky的数量
% 初始化空数组存储能量和角动量
energies = zeros(Nkx, Nky);
angular_momenta = zeros(Nkx, Nky);
% 循环遍历所有动量量子数
for kx = linspace(0, 2*pi, Nkx)
for ky = linspace(0, 2*pi, Nky)
% 构建一维SSH模型的哈密顿量
Hx = [0, t1-t*exp(1i*kx); t1-t*exp(-1i*kx), 0];
% 构建二维SSH模型的哈密顿量
Hy = kron(Hx, eye(2)); % y方向的哈密顿量是单位矩阵乘以Hx
Hz = kron(eye(2), Hx); % z方向的哈密顿量与x相同
% 总哈密顿量
H_total = Hz + Hy;
% 求解总哈密顿量的本征值和本征向量
[E, V] = eig(H_total);
% 提取最低能带的能量和角动量
energies(kx, ky) = E(1);
angular_momenta(kx, ky) = mean(diag(V'*[0;1]*V)); % 角动量计算,这里假设角动量是z分量
end
end
% 绘制结果
figure;
surf(kx, ky, energies);
xlabel('kx');
ylabel('ky');
zlabel('Energy');
title('Energy bands of 2D SSH model');
figure;
surf(kx, ky, angular_momenta);
xlabel('kx');
ylabel('ky');
zlabel('Angular Momentum');
title('Angular Momentum Distribution of 2D SSH model');
这段代码首先定义了SSH模型的参数,然后通过循环遍历所有的动量量子数kx和ky,计算每个点的哈密顿量、能量和角动量。最后,我们使用surf函数绘制了能量带和角动量分布的三维图。
注意:这个角动量的计算方法依赖于特定的基底选择,此处我们选择了简单的 [0; 1] 基底,实际应用中可能需要根据具体问题调整。此外,对于角动量的理解可能需要一些量子力学的基础知识,它通常与系统的对称性有关。在这个例子中,我们简单地计算了低能带波函数的平均角动量作为示例。