Skip to main content
IBM Quantum Platform

filter_diagonal_terms

filter_diagonal_terms(op)

Filtert die Terme eines Operators heraus, die in der Besetzungszahlbasis diagonal sind.

Dadurch werden alle Terme aus dem angegebenen Ausdruck entfernt, FermionOperator die ein Produkt von Zahlenoperatoren sind ( ai†aia^\dagger_i a_i ). Dazu gehören der Konstantenausdruck (ein Produkt aus null Zahlenoperatoren), einzelne Zahlenoperatoren sowie Produkte höherer Ordnung wie beispielsweise ninj=ai†aj†ajain_i n_j = a^\dagger_i a^\dagger_j a_j a_i.

Tipp

Ein wichtiger Grund für das Herausfiltern solcher Terme ergibt sich im Rahmen der Zeitentwicklung von Operatoren, bei der solche Diagonalterme – abgesehen von der Einführung einer globalen Phase – keinen Einfluss auf die Zeitentwicklung haben. Folglich bleiben Bitstrings, die aus einem zeitlich entwickelten Zustand entnommen wurden, davon unberührt. Es wird daher empfohlen, diese zu entfernen, beispielsweise bei der Erstellung eines Hamilton-Operators für die Elektronenstruktur im Rahmen der von SqDRIFT, verwendeten Zeitentwicklung „ qDRIFT “, da dadurch ein ansonsten unnötiger Mehraufwand bei der Abtastung vermieden wird.

Vorsicht

Der angegebene Operator muss normal geordnet sein! Dies ist eine der Implementierung zugrunde liegende Annahme, die nicht überprüft wird. Siehe normal_ordered() für eine Anleitung, wie man einen Operator dieser Form erhält.

Anmerkung

Der Operator wird an Ort und Stelle geändert. Wenn Gruppenindizes nachverfolgt werden (siehe groups), behalten die verbleibenden Terme ihre relative Gruppierung bei, die Gruppenindizes werden jedoch einem zusammenhängenden Bereich neu zugewiesen, der bei 0 beginnt. Sie dürfen sich daher nicht darauf verlassen, dass der spezifische Gruppenindex eines Terms bei einem Aufruf dieser Funktion erhalten bleibt.

>>> from qiskit_fermions.operators import FermionOperator
>>> from qiskit_fermions.operators.terms.filtering import filter_diagonal_terms
>>> op = FermionOperator.from_dict(
...     {
...         (): 1.0,  # constant (diagonal)
...         ((True, 0), (False, 0)): 2.0,  # n_0 (diagonal)
...         ((True, 0), (True, 1), (False, 1), (False, 0)): 3.0,  # n_0 n_1 (diagonal)
...         ((True, 0), (False, 1)): 4.0,  # a†_0 a_1 (off-diagonal)
...     }
... )
>>> filter_diagonal_terms(op)
>>> list(op.iter_terms())
[([(True, 0), (False, 1)], (4+0j))]

Parameter

op – der normalgeordnete Operator, dessen Diagonalelemente herausgefiltert werden sollen.

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