Kitaev Chain BdG Spectrum¶
Model. The Kitaev chain is represented as a single-particle Bogoliubov-de Gennes matrix in a doubled Nambu basis. The matrix has particle-hole symmetry: eigenvalues appear in +E and -E pairs.
Typical uses. Topological superconducting-chain examples, particle-hole symmetry checks, finite BdG spectra, and compact tests for algorithms on structured Hermitian matrices.
Parameters. n_sites is chain length; hopping is the normal hopping t; chemical_potential is mu; pairing is the p-wave pairing amplitude; periodic controls boundary wrapping.
Useful plots. Sorted BdG spectrum, particle-hole paired eigenvalues, and gap versus chemical potential.
import matplotlib.pyplot as plt
import numpy as np
from quantum_lattice_models.models import kitaev_chain_bdg
from quantum_lattice_models.plotting import plot_lattice_spectrum
from quantum_lattice_models.spectra import eigenvalues, spectral_gap
H = kitaev_chain_bdg(n_sites=12, hopping=1.0, chemical_potential=0.4, pairing=0.6)
values = np.sort(eigenvalues(H).real)
print("Kitaev BdG summary")
print(f" matrix shape: {H.shape}")
print(f" hopping t: {H.metadata['hopping']:.2f}")
print(f" chemical potential mu: {H.metadata['chemical_potential']:.2f}")
print(f" pairing Delta: {H.metadata['pairing']:.2f}")
print(f" particle-hole symmetric: {np.allclose(values, -values[::-1])}")
print(f" smallest absolute energy: {np.min(np.abs(values)):.6e}")
Kitaev BdG summary matrix shape: (24, 24) hopping t: 1.00 chemical potential mu: 0.40 pairing Delta: 0.60 particle-hole symmetric: True smallest absolute energy: 3.593732e-04
fig, axes = plt.subplots(1, 2, figsize=(9, 3.4))
plot_lattice_spectrum(H, ax=axes[0], s=18, color="tab:cyan")
axes[0].set_title("Kitaev BdG spectrum")
axes[1].plot(values, -values[::-1], marker="o", linestyle="")
axes[1].plot([values.min(), values.max()], [values.min(), values.max()], color="0.4")
axes[1].set_xlabel("E")
axes[1].set_ylabel("-paired E")
axes[1].set_title("Particle-hole pairing")
fig.tight_layout()
mu_values = np.linspace(-3.0, 3.0, 31)
gaps = [spectral_gap(kitaev_chain_bdg(n_sites=10, chemical_potential=float(mu), pairing=0.6)) for mu in mu_values]
fig, ax = plt.subplots(figsize=(5, 3.2))
ax.plot(mu_values, gaps, marker="o")
ax.set_xlabel("Chemical potential mu")
ax.set_ylabel("BdG spectral gap")
ax.set_title("Kitaev gap sweep")
fig.tight_layout()