Skip to main content
IBM Quantum Platform

Generatori a commutatore

Le rappresentazioni degli operatori offrono funzioni efficienti per il calcolo di vari commutatori. Poiché queste funzioni operano con rappresentazioni generiche degli operatori (un concetto che non esiste in C), vengono illustrate in modo generico nelle tre sezioni seguenti. Le funzioni effettivamente presenti nell'API C per le varie rappresentazioni degli operatori sono elencate in fondo a questa pagina.


Commutatore

qf_op_type_commutator

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

Attenzione

La firma della funzione qui è generica! Uno vero sostituirà OpType con una rappresentazione effettiva dell'operatore e op_type con il prefisso corrispondente (ad esempio, ferm_op per QfFermionOperator).

Il commutatore è definito come:

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

Parametri

  • op_a – Un puntatore all'operatore AA.
  • op_b – Un puntatore all'operatore BB.

Risultati

Un puntatore al commutatore dell'operatore costruito.

Esempio

 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);

Anti-commutatore

qf_op_type_anti_commutator

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

Attenzione

La firma della funzione qui è generica! Uno vero sostituirà OpType con una rappresentazione effettiva dell'operatore e op_type con il prefisso corrispondente (ad esempio, ferm_op per QfFermionOperator).

L'anticommutatore è definito come segue:

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

Parametri

  • op_a – Un puntatore all'operatore AA.
  • op_b – Un puntatore all'operatore BB.

Risultati

Un puntatore all'anti-commutatore dell'operatore costruito.

Esempio

 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);

A doppio commutatore

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)

Attenzione

La firma della funzione qui è generica! Uno vero sostituirà OpType con una rappresentazione effettiva dell'operatore e op_type con il prefisso corrispondente (ad esempio, ferm_op per QfFermionOperator).

Il doppio commutatore è definito come segue (si veda anche il capitolo 13.6, Metodi basati sulle equazioni del moto, pagina 479 di; [1] il caso sign=false corrisponde al doppio commutatore simmetrico che [A,B,C][A, B, C] compare nell'equazione (2) di ) [2]:

Se è sign false, restituisce

[[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.

Se è sign true, restituisce

{[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. Metodi della meccanica quantistica molecolare. 2ª edizione, Academic Press, 1992. ISBN 0-12-486552-6.

[ 2 ]

P. J. Ollitrault, A. Miessen, I. Tavernelli. Dinamica quantistica molecolare: una prospettiva dal punto di vista dell'informatica quantistica. Acc. Chim. Risoluzione. 54, 4229-4238 (2021). https://doi.org/10.1021/acs.accounts.1c00514

Parametri

  • op_a – Un puntatore all'operatore AA.
  • op_b – Un puntatore all'operatore BB.
  • op_c – Un puntatore all’operatore CC.
  • segno – la natura dell’(anti-)commutatore esterno secondo la definizione sopra riportata.

Risultati

Un puntatore all'anti-commutatore dell'operatore costruito.

Esempio

 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);

Funzioni

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)

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