Spin-based Hamiltonians#
This section covers Hamiltonians used to describe spin systems in quantum mechanics.
Heisenberg Model: Models spin interactions with exchange coupling.
Ising Model: A simplified version where only Z-axis interactions matter.
Richardson-Gaudin Model: Used in exactly solvable quantum many-body problems.
Heisenberg Hamiltonian#
The XXZ Heisenberg Model describes quantum spin interactions between sites.
- class HamHeisenberg(mu: ndarray, J_eq: ndarray, J_ax: ndarray, connectivity: ndarray | None = None)#
XXZ Heisenberg Hamiltonian.
- __init__(mu: ndarray, J_eq: ndarray, J_ax: ndarray, connectivity: ndarray | None = None)#
Initialize XXZ Heisenberg Hamiltonian.
- Parameters:
mu (np.ndarray) – Zeeman term
J_eq (np.ndarray) – J equatorial term
J_ax (np.ndarray) – J axial term
connectivity (np.ndarray) – symmetric numpy array that specifies the connectivity between sites
Notes
The form of the Hamiltonian is given by:
\[\hat{H}_{X X Z}=\sum_p\left(\mu_p^Z-J_{p p}^{\mathrm{eq}}\right) S_p^Z+\sum_{p q} J_{p q}^{\mathrm{ax}} S_p^Z S_q^Z+\sum_{p q} J_{p q}^{\mathrm{eq}} S_p^{+} S_q^{-}\]
- generate_one_body_integral(dense: bool, basis='spinorbital basis')#
Generate one body integral.
- Parameters:
dense (bool)
basis (str)
- Return type:
scipy.sparse.csr_matrix or np.ndarray
- generate_two_body_integral(sym=1, dense=False, basis='spinorbital basis')#
Generate two body integral in spatial or spinorbital basis.
- Parameters:
basis (str) – [‘spinorbital basis’, ‘spatial basis’]
dense (bool) – dense or sparse matrix; default False
sym (int) – symmetry – [2, 4, 8] default is 1
- Return type:
scipy.sparse.csr_matrix or np.ndarray
- generate_zero_body_integral()#
Generate zero body term.
- Returns:
zero_energy
- Return type:
float
Example Usage: This example initializes a 3-site Heisenberg Hamiltonian with specified interaction terms and prints the one-body integral matrix.
from moha import HamHeisenberg
import numpy as np
# Define spin interaction parameters
mu = np.array([0.1, 0.2, 0.3])
J_eq = np.array([
[1.0, 0.5, 0.3],
[0.5, 1.0, 0.5],
[0.3, 0.5, 1.0]
])
J_ax = np.array([
[0.5, 0.2, 0.1],
[0.2, 0.5, 0.2],
[0.1, 0.2, 0.5]
])
# Create Heisenberg model instance
H = HamHeisenberg(mu=mu, J_eq=J_eq, J_ax=J_ax)
# Print the one-body integral matrix
print("One-body Integral Matrix:\n", H.generate_one_body_integral(dense=True))
Ising Hamiltonian#
The Ising Model is a simplified case of the Heisenberg model with only axial interactions.
- class HamIsing(mu: ndarray, J_ax: ndarray, connectivity: ndarray | None = None)#
Ising Hamiltonian.
- __init__(mu: ndarray, J_ax: ndarray, connectivity: ndarray | None = None)#
Initialize XXZ Heisenberg Hamiltonian.
- Parameters:
mu (np.ndarray) – Zeeman term
J_ax (np.ndarray) – J axial term
connectivity (np.ndarray) – symmetric numpy array that specifies the connectivity between sites
Notes
The form of the Hamiltonian is given by:
\[\hat{H}_{Ising}=\sum_p\mu_p^Z S_p^Z+\sum_{p q} J_{p q}^{\mathrm{ax}} S_p^Z S_q^Z\]
Example Usage: This example initializes a 3-site Ising Hamiltonian and prints the one-body integral matrix.
from moha import HamIsing
import numpy as np
# Define spin interaction parameters
mu = np.array([0.1, 0.2, 0.3])
J_ax = np.array([
[1.0, 0.5, 0.2],
[0.5, 1.0, 0.5],
[0.2, 0.5, 1.0]
])
# Create Ising model instance
H = HamIsing(mu=mu, J_ax=J_ax)
# Print the one-body integral matrix
print("One-body Integral Matrix:\n", H.generate_one_body_integral(dense=True))
Richardson-Gaudin Hamiltonian#
The Richardson-Gaudin Model is an exactly solvable quantum many-body system.
- class HamRG(mu: ndarray, J_eq: ndarray, connectivity: ndarray | None = None)#
Richardson-Gaudin Hamiltonian.
- __init__(mu: ndarray, J_eq: ndarray, connectivity: ndarray | None = None)#
Initialize XXZ Heisenberg Hamiltonian.
- Parameters:
mu (np.ndarray) – Zeeman term
J_eq (np.ndarray) – J equatorial term
connectivity (np.ndarray)
Notes
The form of the Hamiltonian is given by:
\[\hat{H}_{RG}=\sum_p\left(\mu_p^Z-J_{p p}^{\mathrm{eq}}\right) S_p^Z+\sum_{p q} J_{p q}^{\mathrm{eq}} S_p^{+} S_q^{-}\]
Example Usage: This example initializes a 3-site Richardson-Gaudin Hamiltonian and prints the one-body integral matrix.
from moha import HamRG
import numpy as np
# Define interaction parameters
mu = np.array([0.1, 0.2, 0.3])
J_eq = np.array([
[0.5, 0.3, 0.2],
[0.3, 0.5, 0.3],
[0.2, 0.3, 0.5]
])
# Create Richardson-Gaudin model instance
H = HamRG(mu=mu, J_eq=J_eq)
# Print the one-body integral matrix
print("One-body Integral Matrix:\n", H.generate_one_body_integral(dense=True))