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.