Skip to main content
IBM Quantum Platform

Generadores con conmutador

Las representaciones de operadores ofrecen funciones eficaces para el cálculo de diversos conmutadores. Dado que estas funciones funcionan con representaciones genéricas de operadores (un concepto que no existe en C), se explican de forma genérica en las tres secciones siguientes. Las funciones concretas que contiene la API de C para las distintas representaciones de los operadores se enumeran al final de esta página.


Conmutador

qf_op_type_commutator

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

Precaución

¡La firma de la función aquí es genérica! Uno auténtico sustituirá OpType por una representación real del operador y op_type por su prefijo correspondiente (por ejemplo, ferm_op por QfFermionOperator).

El conmutador se define como:

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

Parámetros

  • op_a – Un puntero al operador AA.
  • op_b – Un puntero al operador BB.

Devuelve

Un puntero al conmutador del operador construido.

Ejemplo

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

Anticommutador

qf_op_type_anti_commutator

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

Precaución

¡La firma de la función aquí es genérica! Uno auténtico sustituirá OpType por una representación real del operador y op_type por su prefijo correspondiente (por ejemplo, ferm_op por QfFermionOperator).

El anticomutador se define como:

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

Parámetros

  • op_a – Un puntero al operador AA.
  • op_b – Un puntero al operador BB.

Devuelve

Un puntero al anticomutador del operador construido.

Ejemplo

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

De doble conmutador

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)

Precaución

¡La firma de la función aquí es genérica! Uno auténtico sustituirá OpType por una representación real del operador y op_type por su prefijo correspondiente (por ejemplo, ferm_op por QfFermionOperator).

El doble conmutador se define de la siguiente manera (véase también el capítulo « 13.6 », «Equation of motion methods», página 479 de [1]; el sign=false caso es el doble conmutador simétrico [A,B,C][A, B, C] que aparece en la ecuación (2) de [ 2] ):

Si es sign false, devuelve

[[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 es sign true, devuelve

{[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étodos de mecánica cuántica molecular. 2.ª edición, Academic Press, 1992. ISBN 0-12-486552-6.

[ 2 ]

P. J. Ollitrault, A. Miessen, I. Tavernelli. Dinámica cuántica molecular: una perspectiva de la informática cuántica. Según... Química. Res. 54, 4229-4238 (2021). https://doi.org/10.1021/acs.accounts.1c00514

Parámetros

  • op_a – Un puntero al operador AA.
  • op_b – Un puntero al operador BB.
  • op_c – Un puntero al operador CC.
  • signo : la naturaleza del (anti-)conmutador exterior según la definición anterior.

Devuelve

Un puntero al anticomutador del operador construido.

Ejemplo

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

Funciones

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)

¿Le ha resultado útil esta página?
Informe de un error, de una errata o solicite contenido en GitHub.