Skip to main content
IBM Quantum Platform

Générateurs à commutateur

Les représentations des opérateurs offrent des fonctions efficaces pour le calcul de divers commutateurs. Comme ces fonctions utilisent des représentations d'opérateurs génériques (une notion qui n'existe pas en C), elles sont présentées de manière générale dans les trois sections suivantes. Les fonctions réelles contenues dans l'API C pour les différentes représentations des opérateurs sont répertoriées au bas de cette page.


Commutateur

qf_op_type_commutator

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

Attention

La signature de cette fonction est générique! Un véritable opérateur remplacera OpType par une représentation d'opérateur réelle et op_type par son préfixe correspondant (par exemple, ferm_op pour QfFermionOperator).

Le commutateur est défini comme suit :

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

Paramètres

  • op_a – Un pointeur vers l'opérateur AA.
  • op_b – Un pointeur vers l'opérateur BB.

Retours

Un pointeur vers le commutateur de l'opérateur construit.

Exemple

 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-commutateur

qf_op_type_anti_commutator

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

Attention

La signature de cette fonction est générique! Un véritable opérateur remplacera OpType par une représentation d'opérateur réelle et op_type par son préfixe correspondant (par exemple, ferm_op pour QfFermionOperator).

L'anti-commutateur est défini comme suit :

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

Paramètres

  • op_a – Un pointeur vers l'opérateur AA.
  • op_b – Un pointeur vers l'opérateur BB.

Retours

Un pointeur vers l'anti-commutateur de l'opérateur construit.

Exemple

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

Double commutateur

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)

Attention

La signature de cette fonction est générique! Un véritable opérateur remplacera OpType par une représentation d'opérateur réelle et op_type par son préfixe correspondant (par exemple, ferm_op pour QfFermionOperator).

Le double commutateur est défini comme suit (voir également le chapitre 13.6, Méthodes basées sur les équations du mouvement, page 479 de; [1] le sign=false cas correspond au double commutateur symétrique figurant [A,B,C][A, B, C] dans l'équation (2) de ) [2] :

Si est sign false, elle renvoie

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

Si est sign true, elle renvoie

{[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. Méthodes de mécanique quantique moléculaire. 2e édition, Academic Press, 1992. ISBN 0-12-486552-6.

[ 2 ]

P. J. Ollitrault, A. Miessen, I. Tavernelli. Dynamique quantique moléculaire : une perspective de l'informatique quantique. Acc. Chim. Rés. 54, 4229-4238 (2021). https://doi.org/10.1021/acs.accounts.1c00514

Paramètres

  • op_a – Un pointeur vers l'opérateur AA.
  • op_b – Un pointeur vers l'opérateur BB.
  • op_c – Un pointeur vers l’opérateur « CC ».
  • signe – la nature de l'anti-commutateur externe, conformément à la définition ci-dessus.

Retours

Un pointeur vers l'anti-commutateur de l'opérateur construit.

Exemple

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

Fonctions

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)

Cette page a-t-elle été utile ?
Signaler un bogue, une coquille ou proposer du contenu sur GitHub.