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)
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 :
Paramètres
- op_a – Un pointeur vers l'opérateur .
- op_b – Un pointeur vers l'opérateur .
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)
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 :
Paramètres
- op_a – Un pointeur vers l'opérateur .
- op_b – Un pointeur vers l'opérateur .
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)
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 dans l'équation (2) de ) [2] :
Si est sign false, elle renvoie
Si est sign true, elle renvoie
[ 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 .
- op_b – Un pointeur vers l'opérateur .
- op_c – Un pointeur vers l’opérateur « ».
- 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)