Skip to main content
IBM Quantum Platform

givens_decomposition_slater

givens_decomposition_slater(orbital_coeffs)

Zerlegt die besetzten Orbitalen einer Slater-Determinante in Givens-Rotationen.

Dies ist das rechteckige Pendant zu givens_decomposition(), das speziell für die Zustandsvorbereitung mittels Slater-Determinanten ausgelegt ist. Ausgehend von der Koeffizientenmatrix der besetzten Orbitalen einer Slater-Determinante gibt die Funktion eine Folge von Givens-Rotationen zurück, die, auf die Referenzkonfiguration ∣1⋯10⋯0⟩\lvert 1 \cdots 1 0 \cdots 0 \rangle (die ersten mm besetzten Orbitalen) angewendet, die Slater-Determinante erzeugen. Hier ist orbital_coeffs eine Matrix der Art „ m×nm \times n “, deren Zeilen die besetzten Orbitale mm darstellen, ausgedrückt in einer Basis aus räumlichen Orbitalen nn ( m≤nm \le n ); es wird angenommen, dass ihre Zeilen orthonormal sind.

Im Gegensatz givens_decomposition()dazu muss diese Zerlegung lediglich die besetzten Orbitale mm abbilden und nicht eine vollständige n×nn \times n Orbitaldrehung; daher verwendet sie höchstens m(n−m)m (n - m) Givens-Drehungen, die in einem rautenförmigen Muster angeordnet sind (im Gegensatz zur n(n−1)/2n (n - 1) / 2 „Ziegelmauer“ der quadratischen Zerlegung). Die Zerlegung enthält keine Diagonalphasen, da eine globale Phase und jede Rotation innerhalb des besetzten Raums den vorbereiteten Slater-Determinanten unverändert lassen.

Jede Givens-Rotation wird durch ein 4-Tupel definiert (c, s, i, j), wobei:

  • c: der reellwertige Kosinus
  • s: die komplexwertige Sinusfunktion
  • i: der erste Index
  • j: der zweite (angrenzende) Index

was zu einer Matrix der folgenden Form führt:

(cs−s†c)\begin{pmatrix} c & s \\ -s^\dagger & c \end{pmatrix}

Parameter

orbital_coeffs – die „ m×nm \times n “-Matrix der Koeffizienten der besetzten Orbitale.

Rückgabe

Die Folge von Givens-Rotationen, dargestellt als 4-Tupel, wie oben erläutert.

Die besetzten Orbitalen werden ermittelt, indem die zurückgegebenen Rotationen der Reihe nach auf die Spalten der Referenz „ m×nm \times n “ ( (Im0)\begin{pmatrix} I_m & 0 \end{pmatrix} ) angewendet werden, wobei jede Rotation, die auf die Indizes ii und jj wirkt,

vi↦c vi+s†vj,vj↦c vj−s vi.v_i \mapsto c \, v_i + s^\dagger v_j, \qquad v_j \mapsto c \, v_j - s \, v_i.

Das Ergebnis erstreckt sich über denselben besetzten Raum wie orbital_coeffs (sie definieren dieselbe Slater-Determinante), sodass die quadratische Überlappung ∣det⁡(AB†)∣2\lvert \det(A B^\dagger) \rvert^2 zwischen den rekonstruierten Orbitalen AA und dem Zielorbital BB gleich eins ist.

>>> 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
Siehe auch

givens_decomposition() für die quadratische (vollständige Umlaufbahnrotation) Zerlegung.

War diese Seite hilfreich?
Melden Sie auf GitHub einen Fehler, einen Tippfehler oder fordern Sie Inhalte an.