Skip to main content
IBM Quantum Platform

givens_decomposition_slater

givens_decomposition_slater(orbital_coeffs)

Descompone los orbitales ocupados de un determinante de Slater en rotaciones de Givens.

Esta es la versión rectangular de givens_decomposition(), especializada en la preparación de estados mediante el determinante de Slater. A partir de la matriz de coeficientes de los orbitales ocupados de un determinante de Slater, devuelve una secuencia de rotaciones de Givens que, al aplicarlas a la configuración de referencia 1100\lvert 1 \cdots 1 0 \cdots 0 \rangle (los primeros orbitales ocupados mm ), dan como resultado el determinante de Slater. Aquí orbital_coeffs tenemos una matriz de tipo « m×nm \times n », cuyas filas son los orbitales ocupados mm expresados en una base de orbitales espaciales nn ( mnm \le n ); se supone que sus filas son ortonormales.

A diferencia de givens_decomposition(), esta descomposición solo necesita representar los orbitales ocupados mm en lugar de una rotación orbital completa n×nn \times n, por lo que utiliza como máximo m(nm)m (n - m) rotaciones de Givens dispuestas en forma de rombo (frente al n(n1)/2n (n - 1) / 2 «muro de ladrillos» de la descomposición cuadrada). La descomposición no contiene fases diagonales, ya que una fase global y cualquier rotación dentro del espacio ocupado no modifican el determinante de Slater preparado.

Cada rotación de Givens se define mediante un cuádruple, (c, s, i, j), en el que:

  • c: el coseno de valor real
  • s: el seno de valor complejo
  • i: el primer índice
  • j: el segundo índice (adyacente)

lo que da lugar a una matriz de la forma:

(cssc)\begin{pmatrix} c & s \\ -s^\dagger & c \end{pmatrix}

Parámetros

orbital_coeffs : la matriz « m×nm \times n » de coeficientes de orbitales ocupados.

Devuelve

La secuencia de rotaciones de Givens representada mediante cuatrupletas, tal y como se ha explicado anteriormente.

Los orbitales ocupados se recuperan aplicando, en orden, las rotaciones devueltas a las columnas de la referencia « m×nm \times n » ( (Im0)\begin{pmatrix} I_m & 0 \end{pmatrix} ), donde cada rotación que actúa sobre los índices ii y jj envía

vicvi+svj,vjcvjsvi.v_i \mapsto c \, v_i + s^\dagger v_j, \qquad v_j \mapsto c \, v_j - s \, v_i.

El resultado abarca el mismo espacio ocupado que orbital_coeffs (definen el mismo determinante de Slater), por lo que el solapamiento al cuadrado det(AB)2\lvert \det(A B^\dagger) \rvert^2 entre los orbitales reconstruidos AA y el orbital de referencia BB es igual a uno.

>>> import numpy as np
>>> from qiskit_fermions.linalg import givens_decomposition_slater
>>> # two occupied orbitals in a basis of three, with orthonormal rows
>>> base = np.array([[0.8, 0.6, 0.0], [-0.48, 0.64, 0.6]])
>>> orbital_coeffs = (base * np.array([[1.0], [1j]])).astype(complex)
>>> rotations = givens_decomposition_slater(orbital_coeffs)
>>> m, n = orbital_coeffs.shape
>>> reconstructed = np.eye(m, n, dtype=complex)
>>> for c, s, i, j in rotations:
...     col_i, col_j = reconstructed[:, i].copy(), reconstructed[:, j].copy()
...     reconstructed[:, i] = c * col_i + s.conjugate() * col_j
...     reconstructed[:, j] = c * col_j - s * col_i
>>> overlap = abs(np.linalg.det(reconstructed @ orbital_coeffs.conj().T)) ** 2
>>> bool(np.isclose(overlap, 1.0))
True
Consulte también

givens_decomposition() para la descomposición cuadrática (rotación orbital completa).

¿Le ha resultado útil esta página?
Informe de un error, de una errata o solicite contenido en GitHub.