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:

  1. 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.
  2. 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}$$

  3. Coordinate Initialization: It calculates the coordinate step size dx and generates a coordinate range x 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}$$

  4. 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}}$$

  5. Hamiltonian Construction: It constructs the Hamiltonian matrix based on the kinetic energy k and potential energy v. 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 and fftpack.ifft) to the Hamiltonian matrix.

    Finally, the diagonal potential energy term is added to the Hamiltonian.

  6. 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.
  7. 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's linalg.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.

In [ ]: