Skip to main content
IBM Quantum Platform

givens_decomposition_slater

givens_decomposition_slater(orbital_coeffs)

Scompone gli orbitali occupati di un determinante di Slater in rotazioni di Givens.

Si tratta della versione rettangolare di givens_decomposition(), specializzata nella preparazione dello stato tramite il determinante di Slater. Data la matrice dei coefficienti degli orbitali occupati di un determinante di Slater, restituisce una sequenza di rotazioni di Givens che, applicate alla configurazione di riferimento 1100\lvert 1 \cdots 1 0 \cdots 0 \rangle (i primi mm orbitali occupati), preparano il determinante di Slater. orbital_coeffs Ecco una matrice di m×nm \times n, le cui righe sono gli orbitali occupati mm espressi in una base di orbitali spaziali nn ( mnm \le n ); si presume che le sue righe siano ortonormali.

A differenza di givens_decomposition(), questa scomposizione deve solo realizzare gli orbitali occupati mm anziché una rotazione completa degli orbitali n×nn \times n; pertanto, utilizza al massimo m(nm)m (n - m) rotazioni di Givens disposte a forma di rombo (rispetto alla struttura a “muro di mattoni” n(n1)/2n (n - 1) / 2 della scomposizione quadrata). La scomposizione non contiene fasi diagonali, poiché una fase globale e qualsiasi rotazione all’interno dello spazio occupato lasciano invariato il determinante di Slater preparato.

Ogni rotazione di Givens è definita da una quadrupla, (c, s, i, j), in cui:

  • c: il coseno a valori reali
  • s: il seno a valori complessi
  • i: il primo indice
  • j: il secondo indice (adiacente)

che danno come risultato una matrice della forma:

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

Parametri

orbital_coeffs – la matrice “ m×nm \times n ” dei coefficienti degli orbitali occupati.

Risultati

La sequenza di rotazioni di Givens rappresentata come quartupla, come spiegato sopra.

Gli orbitali occupati vengono ricavati applicando, in ordine, le rotazioni restituite alle colonne del riferimento “ m×nm \times n ” ( (Im0)\begin{pmatrix} I_m & 0 \end{pmatrix} ), dove ogni rotazione che agisce sugli indici ii e jj invia

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

Il risultato occupa lo stesso spazio ( orbital_coeffs poiché definiscono lo stesso determinante di Slater), quindi la sovrapposizione al quadrato det(AB)2\lvert \det(A B^\dagger) \rvert^2 tra gli orbitali ricostruiti AA e quelli di riferimento BB è pari 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
Vedi anche

givens_decomposition() per la scomposizione in quadrati (rotazione orbitale completa).

Questa pagina è stata utile?
Segnala un bug, un errore di battitura o richiedi contenuti su GitHub.