Mutually Unbiased Bases (MUBs) are a concept from quantum mechanics and quantum information theory. MUBs are sets of orthonormal bases in a finite-dimensional Hilbert space such that the inner products (or overlaps) between states from different bases are as uniform as possible. In other words, if you have two different bases from a set of MUBs, the inner product between any pair of basis states from these two bases is as close to zero as possible, indicating that these bases provide complementary information about a quantum system.
More formally, for two different bases {ψ₁, ψ₂, ..., ψₙ} and {φ₁, φ₂, ..., φₙ} in a Hilbert space, they are mutually unbiased if:
$$|\langle ψᵢ | φⱼ ⟩|^2 = \frac{1}{n}$$
for all i and j, where n is the dimension of the Hilbert space. In other words, the modulus squared of the inner product between any pair of states from different bases is a constant value of 1/n.
MUBs are particularly important in quantum information theory and quantum cryptography. They have applications in quantum state tomography, quantum key distribution, and other areas of quantum physics. The existence and properties of MUBs are a topic of active research and have connections to topics like finite fields, number theory, and group theory.
In practical terms, MUBs provide a way to perform measurements on a quantum system that maximizes our ability to distinguish between different quantum states, which is essential for various quantum information processing tasks.
This Python code defines a class called MUBQHamiltonian
for generating a quantum Hamiltonian in the coordinate representation for a 1D quantum system using mutually unbiased bases (MUB). Here's a LaTeX explanation of what this code does:
Initialization: The class is initialized with several parameters:
x_grid_dim
: The grid size for the coordinate representation.x_amplitude
: The maximum value of the coordinates.v
: The potential energy as a function.k
: The kinetic energy as a function.
Attribute Checks: The code checks that all attributes are specified correctly, including ensuring that
x_amplitude
is a power of 2.$$2^{\lfloor\log_2(\text{x\_grid\_dim})\rfloor} = \text{x\_grid\_dim}$$
Coordinate Initialization: It calculates the coordinate step size
dx
and generates a coordinate rangex
based on the grid dimensions and amplitude.$$\text{dx} = \frac{2 \cdot \text{x\_amplitude}}{\text{x\_grid\_dim}}$$
$$\text{x} = \left(\text{np.arange}(\text{x\_grid\_dim}) - \frac{\text{x\_grid\_dim}}{2}\right) \cdot \text{dx}$$
Momentum Initialization: It generates a momentum range
p
corresponding to FFT frequencies.$$\text{p} = \left(\text{np.arange}(\text{x\_grid\_dim}) - \frac{\text{x\_grid\_dim}}{2}\right) \cdot \frac{\pi}{\text{x\_amplitude}}$$
Hamiltonian Construction: It constructs the Hamiltonian matrix based on the kinetic energy
k
and potential energyv
. The Hamiltonian is a 2D array with alternating signs.$$\text{self.hamiltonian} = \text{np.diag}(\text{k}(\text{self.p}))$$
$$\text{self.hamiltonian} *= \text{minus}$$
Here,
minus
is a 2D array of alternating signs.Then, the code applies Fourier transforms (
fftpack.fft
andfftpack.ifft
) to the Hamiltonian matrix.Finally, the diagonal potential energy term is added to the Hamiltonian.
Eigenstate and Energy Retrieval:
get_eigenstate(n)
: Returns the n-th eigenfunction as a copy of a NumPy array.get_energy(n)
: Returns the energy of the n-th eigenfunction as a real value.
Diagonalization: The
diagonalize
method checks whether the Hamiltonian has been diagonalized. If not, it diagonalizes the Hamiltonian to compute the eigenstates and energies using SciPy'slinalg.eigh
function. The eigenstates are normalized, and the ground state is ensured to be non-negative.
In summary, this code constructs a Hamiltonian matrix for a 1D quantum system using MUB, allowing users to access eigenstates and energies of the system. It also ensures that the ground state is physically meaningful by making it non-negative.