Skip to main content
IBM Quantum Platform

Kommutatorgeneratoren

Die Operatordarstellungen bieten effiziente Funktionen zur Berechnung verschiedener Kommutatoren. Da diese Funktionen mit generischen Operator-Darstellungen arbeiten (ein Konzept, das es in C nicht gibt), werden sie in den folgenden drei Abschnitten allgemein erläutert. Die tatsächlichen Funktionen, die in der C-API für die verschiedenen Operator-Darstellungen enthalten sind, sind am Ende dieser Seite aufgeführt.


Kommutator

qf_op_type_commutator

OpType qf_op_type_commutator(const OpType *op_a, const OpType *op_b)

Vorsicht

Die Funktionssignatur ist hier generisch! Ein echter Operator ersetzt OpType durch eine tatsächliche Operatordarstellung und op_type durch das dazugehörige Präfix (zum Beispiel ferm_op für QfFermionOperator).

Der Kommutator ist wie folgt definiert:

[A,B]=AB−BA[A, B] = AB - BA

Parameter

  • op_a – Ein Zeiger auf die Operator- AA e.
  • op_b – Ein Zeiger auf die Operator BB.

Rückgabe

Ein Zeiger auf den konstruierten Operator-Kommutator.

Beispiel

 1QfFermionOperator *op1 = qf_ferm_op_zero();
 2QkComplex64 coeff1 = {1.0, 0.0};
 3bool action1[2] = {true, false};
 4uint32_t modes1[2] = {0, 0};
 5qf_ferm_op_add_term(op1, 2, action1, modes1, &coeff1);
 6QfFermionOperator *op2 = qf_ferm_op_zero();
 7QkComplex64 coeff2 = {2.0, 0.0};
 8bool action2[2] = {false, true};
 9uint32_t modes2[2] = {0, 0};
10qf_ferm_op_add_term(op2, 2, action2, modes2, &coeff2);
11
12QfFermionOperator *comm = qf_ferm_op_commutator(op1, op2);

Antikommutator

qf_op_type_anti_commutator

OpType qf_op_type_anti_commutator(const OpType *op_a, const OpType *op_b)

Vorsicht

Die Funktionssignatur ist hier generisch! Ein echter Operator ersetzt OpType durch eine tatsächliche Operatordarstellung und op_type durch das dazugehörige Präfix (zum Beispiel ferm_op für QfFermionOperator).

Der Antikommutator ist wie folgt definiert:

{A,B}=AB+BA\{A, B\} = AB + BA

Parameter

  • op_a – Ein Zeiger auf die Operator- AA e.
  • op_b – Ein Zeiger auf die Operator BB.

Rückgabe

Ein Zeiger auf den konstruierten Operator-Antikommutator.

Beispiel

 1QfFermionOperator *op1 = qf_ferm_op_zero();
 2QkComplex64 coeff1 = {1.0, 0.0};
 3bool action1[2] = {true, false};
 4uint32_t modes1[2] = {0, 0};
 5qf_ferm_op_add_term(op1, 2, action1, modes1, &coeff1);
 6QfFermionOperator *op2 = qf_ferm_op_zero();
 7QkComplex64 coeff2 = {2.0, 0.0};
 8bool action2[2] = {false, true};
 9uint32_t modes2[2] = {0, 0};
10qf_ferm_op_add_term(op2, 2, action2, modes2, &coeff2);
11
12QfFermionOperator *anti_comm = qf_ferm_op_anti_commutator(op1, op2);

Doppelkommutator

qf_op_type_double_commutator

OpType qf_op_type_double_commutator(const OpType *op_a, const OpType *op_b, const OpType *op_c, bool sign)

Vorsicht

Die Funktionssignatur ist hier generisch! Ein echter Operator ersetzt OpType durch eine tatsächliche Operatordarstellung und op_type durch das dazugehörige Präfix (zum Beispiel ferm_op für QfFermionOperator).

Der Doppelkommutator ist wie folgt definiert (siehe auch Kapitel „ 13.6 “, „Equation of motion methods“, Seite 479 von [1]; der Fall sign=false ist der symmetrische Doppelkommutator [A,B,C][A, B, C], der in Gleichung (2) von [ 2] vorkommt):

Wenn ist sign``false , gibt es Folgendes zurück:

[[A,B],C]/2+[A,[B,C]]/2=(2ABC+2CBA−BAC−CAB−ACB−BCA)/2.[[A, B], C]/2 + [A, [B, C]]/2 = (2ABC + 2CBA - BAC - CAB - ACB - BCA)/2.

Wenn ist sign``true , gibt es Folgendes zurück:

{[A,B],C}/2+{A,[B,C]}/2=(2ABC−2CBA−BAC+CAB−ACB+BCA)/2.\{[A, B], C\}/2 + \{A, [B, C]\}/2 = (2ABC - 2CBA - BAC + CAB - ACB + BCA)/2.

[ 1 ]

R. McWeeny. Methoden der molekularen Quantenmechanik. 2. Auflage, Academic Press, 1992. ISBN 0-12-486552-6.

[ 2 ]

P. J. Ollitrault, A. Miessen, I. Tavernelli. Molekulare Quantendynamik: Eine Perspektive aus der Quanteninformatik. Anm. Chem. Res. 54, 4229–4238 (2021). https://doi.org/10.1021/acs.accounts.1c00514

Parameter

  • op_a – Ein Zeiger auf die Operator- AA e.
  • op_b – Ein Zeiger auf die Operator BB.
  • op_c – Ein Zeiger auf die Operator CC.
  • Vorzeichen – die Art des äußeren (Anti-)Kommutators gemäß der obigen Definition.

Rückgabe

Ein Zeiger auf den konstruierten Operator-Antikommutator.

Beispiel

 1QfFermionOperator *op1 = qf_ferm_op_zero();
 2QkComplex64 coeff1 = {1.0, 0.0};
 3bool action1[2] = {true, false};
 4uint32_t modes1[2] = {0, 0};
 5qf_ferm_op_add_term(op1, 2, action1, modes1, &coeff1);
 6QfFermionOperator *op2 = qf_ferm_op_zero();
 7QkComplex64 coeff2 = {2.0, 0.0};
 8bool action2[2] = {false, true};
 9uint32_t modes2[2] = {0, 0};
10qf_ferm_op_add_term(op2, 2, action2, modes2, &coeff2);
11QfFermionOperator *op3 = qf_ferm_op_zero();
12qf_ferm_op_add_term(op3, 2, action1, modes1, &coeff1);
13QkComplex64 coeff3 = {2.0, 0.5};
14qf_ferm_op_add_term(op3, 2, action2, modes2, &coeff3);
15
16QfFermionOperator *double_comm = qf_ferm_op_double_commutator(op1, op2, op3, false);

Funktionen

qf_ferm_op_commutator

QfFermionOperator *qf_ferm_op_commutator(const QfFermionOperator *op_a, const QfFermionOperator *op_b)

qf_ferm_op_anti_commutator

QfFermionOperator *qf_ferm_op_anti_commutator(const QfFermionOperator *op_a, const QfFermionOperator *op_b)

qf_ferm_op_double_commutator

QfFermionOperator *qf_ferm_op_double_commutator(const QfFermionOperator *op_a, const QfFermionOperator *op_b, const QfFermionOperator *op_c, bool sign)

qf_maj_op_commutator

QfMajoranaOperator *qf_maj_op_commutator(const QfMajoranaOperator *op_a, const QfMajoranaOperator *op_b)

qf_maj_op_anti_commutator

QfMajoranaOperator *qf_maj_op_anti_commutator(const QfMajoranaOperator *op_a, const QfMajoranaOperator *op_b)

qf_maj_op_double_commutator

QfMajoranaOperator *qf_maj_op_double_commutator(const QfMajoranaOperator *op_a, const QfMajoranaOperator *op_b, const QfMajoranaOperator *op_c, bool sign)

qf_edge_op_commutator

QfEdgeVertexOperator *qf_edge_op_commutator(const QfEdgeVertexOperator *op_a, const QfEdgeVertexOperator *op_b)

qf_edge_op_anti_commutator

QfEdgeVertexOperator *qf_edge_op_anti_commutator(const QfEdgeVertexOperator *op_a, const QfEdgeVertexOperator *op_b)

qf_edge_op_double_commutator

QfEdgeVertexOperator *qf_edge_op_double_commutator(const QfEdgeVertexOperator *op_a, const QfEdgeVertexOperator *op_b, const QfEdgeVertexOperator *op_c, bool sign)

qf_transfer_op_commutator

QfTransferVertexOperator *qf_transfer_op_commutator(const QfTransferVertexOperator *op_a, const QfTransferVertexOperator *op_b)

qf_transfer_op_anti_commutator

QfTransferVertexOperator *qf_transfer_op_anti_commutator(const QfTransferVertexOperator *op_a, const QfTransferVertexOperator *op_b)

qf_transfer_op_double_commutator

QfTransferVertexOperator *qf_transfer_op_double_commutator(const QfTransferVertexOperator *op_a, const QfTransferVertexOperator *op_b, const QfTransferVertexOperator *op_c, bool sign)

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