Skip to main content
IBM Quantum Platform

givens_decomposition_slater

givens_decomposition_slater(orbital_coeffs)

Decompõe os orbitais ocupados de um determinante de Slater em rotações de Givens.

Esta é a versão retangular de givens_decomposition(), especializada na preparação de estados por meio do determinante de Slater. Dada a matriz de coeficientes dos orbitais ocupados de um determinante de Slater, a função retorna uma sequência de rotações de Givens que, quando aplicadas à configuração de referência 1100\lvert 1 \cdots 1 0 \cdots 0 \rangle (os primeiros orbitais mm ocupados), geram o determinante de Slater. Aqui está orbital_coeffs uma matriz de m×nm \times n, cujas linhas correspondem aos orbitais ocupados mm, expressos em uma base de orbitais espaciais nn ( mnm \le n ); supõe-se que suas linhas sejam ortonormais.

Ao contrário da decomposição anterior givens_decomposition(), essa decomposição precisa apenas representar os orbitais ocupados mm, em vez de uma rotação orbital completa n×nn \times n; portanto, ela utiliza, no máximo, m(nm)m (n - m) rotações de Givens dispostas em um padrão em forma de diamante (em comparação com a n(n1)/2n (n - 1) / 2 “parede de tijolos” da decomposição quadrada). A decomposição não contém fases diagonais, pois uma fase global e qualquer rotação dentro do espaço ocupado não alteram o determinante de Slater preparado.

Cada rotação de Givens é definida por um quarteto, (c, s, i, j), com:

  • c: o cosseno de valor real
  • s: o seno de valor complexo
  • i: o primeiro índice
  • j: o segundo índice (adjacente)

o que resulta em uma matriz da forma:

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

Parâmetros

orbital_coeffs – a matriz “ m×nm \times n ” dos coeficientes dos orbitais ocupados.

Retorna

A sequência de rotações de Givens representada por quartetos, conforme explicado acima.

Os orbitais ocupados são recuperados aplicando-se as rotações retornadas, em ordem, às colunas da referência “ m×nm \times n(Im0)\begin{pmatrix} I_m & 0 \end{pmatrix}, onde cada rotação que atua sobre os índices ii e jj envia

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

O resultado abrange o mesmo espaço ocupado que orbital_coeffs (eles definem o mesmo determinante de Slater), de modo que a sobreposição ao quadrado det(AB)2\lvert \det(A B^\dagger) \rvert^2 entre os orbitais reconstruídos AA e os orbitais-alvo BB é igual a um.

>>> 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
Veja Também

givens_decomposition() para a decomposição quadrática (rotação orbital completa).

Esta página foi útil?
Relate um bug, erro de digitação ou solicite conteúdo no GitHub.