Diagonalizing a Pauli Hamiltonian

This tutorial demonstrates how to:

  • Construct a fermionic Hamiltonian using creation and annihilation operators

  • Encode the fermionic Hamiltonian into a qubit Pauli Hamiltonian using Jordan-Wigner transformation

  • Diagonalize the Pauli Hamiltonian to obtain its eigenvalues and eigenvectors

1. Import Required Modules

[1]:
import numpy as np

from isqham.diag import PauliHamiltonianSolver
from isqham.qubitEncoding import JordanWignerEncoding

2. Construct a Fermionic Hamiltonian

We build the following Hamiltonian:

\[H = 1 \cdot c_0^\dagger c_0 + 1.5 \cdot c_1^\dagger c_1 + 0.7 \cdot c_0^\dagger c_0 \cdot c_1^\dagger c_1\]
[2]:
encoding = JordanWignerEncoding
p = (
    1 * encoding.c(0) * encoding.cd(0)
    + 1.5 * encoding.c(1) * encoding.cd(1)
    + 0.7 * encoding.c(0) * encoding.cd(0) * encoding.c(1) * encoding.cd(1)
)

3. Export the Pauli Hamiltonian

[3]:
h = p.exportPauliHamiltonian()

4. Solve for Eigenvalues and Eigenvectors

[4]:
eigenvalues, eigenvectors = PauliHamiltonianSolver.getEigen(h)

5. Verify the Results

[5]:
print("Eigenvalues:")
print(eigenvalues)

print("\nEigenvectors (columns):")
print(eigenvectors)
Eigenvalues:
[0.  1.  1.5 3.2]

Eigenvectors (columns):
[[1. 0. 0. 0.]
 [0. 1. 0. 0.]
 [0. 0. 1. 0.]
 [0. 0. 0. 1.]]

6. Summary

In this tutorial, we have shown how to:

  • Build a fermionic Hamiltonian

  • Encode it into a Pauli Hamiltonian using Jordan-Wigner transformation

  • Solve its spectrum using exact diagonalization

This serves as a foundation for future tasks such as variational quantum eigensolvers (VQE) or quantum simulation.