Skip to main content
IBM Quantum Platform

OrbitalRotation

class OrbitalRotation(rotation_unitary)

Basen: FermionicGate

Führt eine Umlaufdrehung durch.

Für eine unitäre Matrix UU (rotation_unitary) mit der Form „ n×nn \times n “ implementiert dieses Gate den Basiswechsel für ein einzelnes Teilchen, der die Erzeugungsoperatoren wie folgt abbildet:

ai†↦∑jUjiaj†,a^\dagger_i \mapsto \sum_j U_{ji} a^\dagger_j,

was der Anwendung der unitaren Vielteilchen-Operation entspricht

exp⁡(∑ijlog⁡(U)ij ai†aj).\exp\left(\sum_{ij} \log(U)_{ij} \, a^\dagger_i a_j\right).

Die Anzahl der fermionischen Moden, auf die das Gatter einwirkt, entspricht der Dimension nn von rotation_unitary.

Die Initialisierung einer Instanz dieses Gatters kann mit den unten aufgeführten Argumenten erfolgen.

Parameter

rotation_unitary (np.ndarray) – die n×nn \times n -Unitar-Matrix UU, die die Orbitalrotation über ai†↦∑jUjiaj†a^\dagger_i \mapsto \sum_j U_{ji} a^\dagger_j definiert. Sie muss quadratisch und unitar sein; dies liegt in der Verantwortung des Aufrufers und wird nicht überprüft.


Attribute

rotation_unitary

Die Einheitsmatrix, die die Drehkoeffizienten der Bahnen darstellt.


Methoden

from_t1_amplitudes

classmethod from_t1_amplitudes(t1)

Erzeugt eine Orbitalrotation aus den Amplituden „ t1t_1 “ (Einzelamplituden).

Die Rotation ist die unitäre exp⁡(t1−t1†)\exp(t_1 - t_1^\dagger), wobei die nocc×nvirtn_\text{occ} \times n_\text{virt} Amplitudenmatrix t1t_1 in den antihermitischen Generator über alle n=nocc+nvirtn = n_\text{occ} + n_\text{virt} Orbitale eingebettet ist

G=(0−t1∗t1⊤0),G = \begin{pmatrix} 0 & -t_1^* \\ t_1^\top & 0 \end{pmatrix},

wobei die besetzten Orbitalen vor den virtuellen aufgeführt werden. Dies ist die Orbitalrotation bei Einzelanregung, die in den (L)UCJ-Ansatz einfließt, wenn dieser aus Amplituden des Coupled-Cluster-Verfahrens initialisiert wird; siehe UCJ.

Parameter

t1 (ndarray) – die Amplituden von „ t1t_1 “ der Form (nocc, nvrt), wobei die Anzahl der besetzten Orbitalen und die Anzahl der virtuellen Orbitalen nvrt ist nocc .

Rückgabe

Eine auf die n=nocc+nvirtn = n_\text{occ} + n_\text{virt} -Modi wirkende OrbitalRotation , deren exp⁡(t1−t1†)\exp(t_1 - t_1^\dagger) ist rotation_unitary .

Rückgabetyp

OrbitalRotation

Protokollmethoden

_apply_unitary_placed_

_apply_unitary_placed_(vec, norb, nelec, copy, freg_indices)

Wendet die Orbitalrotation an, nachdem sie auf die globalen Moden des Vektors angewendet wurde.

Die lokale Matrix des Gates ( rotation_unitary eine n×nn \times n -Matrix, die auf die Moden num_modes des Gates wirkt) wird zunächst in das vollständige Register eingebettet: eine Identitätsmatrix mit der Anzahl der Moden des Zustandsvektors, wobei in die durch ausgewählten Zeilen bzw. Spalten rotation_unitary eingetragen wird freg_indices.

Im Fall mit Spin muss die eingebettete Matrix über die Alpha/Beta-Aufteilung hinweg blockdiagonal sein. Eine Rotation mit nicht-null-wertigen Alpha-/Beta-Blöcken außerhalb der Diagonalen mischt die Spinsektoren, wodurch die individuellen Alpha-/Beta-Elektronenzahlen nicht erhalten bleiben und somit die Amplitude aus dem festen (n_alpha, n_beta) Sektor herausabgebildet wird – eine Operation, die der Zustandsvektor des festen Sektors nicht darstellen kann. Eine solche Rotation wird mit einem ValueError. abgelehnt.

Die eingebettete Matrix wird dann über den Givens-Rotationskern ffsim.apply_orbital_rotation()von … angewendet. Gemäß der „Spinful“-Block-Spin-Konvention (Modi 0..norb sind Alpha-Orbitale, Modi norb..2*norb sind Beta-Orbitale) sind die beiden Diagonalblöcke die pro Spin berechneten Rotationen, die als an ffsim übergeben werden (mat_a, mat_b).

Parameter

  • vec (ndarray) – der Zustandsvektor, auf den die Aktion angewendet werden soll.
  • norb (int) – die Anzahl der räumlichen Orbitalen des globalen Zustandsvektors.
  • nelec (int |tuple[int, int]) – entweder eine einzelne ganze Zahl für ein spinloses System oder ein Paar ganzer Zahlen, das die Anzahl der Alpha- und Beta-Fermionen angibt. Eine ganze Zahl wählt die Interpretation der spinlosen Moden (die Moden norb sind Orbitalen); ein Zahlenpaar wählt die Interpretation der Moden 2 * norb als spinbehaftete (orb, spin) Block-Spin-Moden.
  • copy (bool) – ob der Vektor vor der Bearbeitung kopiert werden soll.
  • freg_indices (list[int]) – die absoluten (globalen) Modenindizes, auf die die lokalen Moden dieses Gitters abgebildet werden. Die Drehung wird vor ihrer Anwendung in diese globalen Moden eingebettet.

Rückgabe

Der transformierte Vektor.

Erhöhungen

  • MissingOptionalLibraryError – falls ffsim nicht installiert ist.
  • ValueError – wenn ein Spinpaar nelec ist und die (eingebrachte) Rotation die Alpha- und Beta-Spinsektoren vermischt.

Rückgabetyp

ndarray

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