qml.qchem.one_particle¶
-
one_particle
(matrix_elements, core=None, active=None, cutoff=1e-12)[source]¶ Generates the FermionOperator representing a given one-particle operator required to build many-body qubit observables.
Second quantized one-particle operators are expanded in the basis of single-particle states as
\[\hat{T} = \sum_{\alpha, \beta} \langle \alpha \vert \hat{t} \vert \beta \rangle [\hat{c}_{\alpha\uparrow}^\dagger \hat{c}_{\beta\uparrow} + \hat{c}_{\alpha\downarrow}^\dagger \hat{c}_{\beta\downarrow}].\]In the equation above the indices \(\alpha, \beta\) run over the basis of spatial orbitals \(\phi_\alpha(r)\). Since the operator \(\hat{t}\) acts only on the spatial coordinates, the spin quantum numbers are indicated explicitly with the up/down arrows. The operators \(\hat{c}^\dagger\) and \(\hat{c}\) are the particle creation and annihilation operators, respectively, and \(\langle \alpha \vert \hat{t} \vert \beta \rangle\) denotes the matrix elements of the operator \(\hat{t}\)
\[\langle \alpha \vert \hat{t} \vert \beta \rangle = \int dr ~ \phi_\alpha^*(r) \hat{t}(r) \phi_\beta(r).\]If an active space is defined (see
active_space()
), the summation indices run over the active orbitals and the contribution due to core orbitals is computed as \(t_\mathrm{core} = 2 \sum_{\alpha\in \mathrm{core}} \langle \alpha \vert \hat{t} \vert \alpha \rangle\).- Parameters
matrix_elements (array[float]) – 2D NumPy array with the matrix elements \(\langle \alpha \vert \hat{t} \vert \beta \rangle\)
core (list) – indices of core orbitals, i.e., the orbitals that are not correlated in the many-body wave function
active (list) – indices of active orbitals, i.e., the orbitals used to build the correlated many-body wave function
cutoff (float) – Cutoff value for including matrix elements. The matrix elements with absolute value less than
cutoff
are neglected.
- Returns
an instance of OpenFermion’s
FermionOperator
representing the one-particle operator \(\hat{T}\).- Return type
FermionOperator
Example
>>> import numpy as np >>> matrix_elements = np.array([[-1.27785301e+00, 0.00000000e+00], ... [ 1.52655666e-16, -4.48299696e-01]]) >>> t_op = one_particle(matrix_elements) >>> print(t_op) -1.277853006156875 [0^ 0] + -1.277853006156875 [1^ 1] + -0.44829969610163756 [2^ 2] + -0.44829969610163756 [3^ 3]