Skip to main content
IBM Quantum Platform

整流子式発電機

演算子表現は、さまざまな交換子の計算に効率的な関数を提供します。 これらの関数はジェネリックな演算子の表現(C言語には存在しない概念)を用いて動作するため、以下の3つのセクションで一般的な観点から説明します。 各種演算子の表現に対応する C API に含まれる実際の関数は、このページの下部に一覧表示されています。


整流子

qf_op_type_commutator

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

警告

ここでの関数のシグネチャはジェネリックです! 実際の演算子では、 OpType は実際の演算子の表記に、 はそれに対応する接頭辞 op_type に置き換えられます(例えば、 は となります ferm_opQfFermionOperator )。

コミューテータは次のように定義される:

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

パラメーター

  • op_a – 演算子 AA へのポインタ。
  • op_b – 演算子 BB へのポインタ。

戻り値

構築された演算子コミューテーターへのポインタ。

例

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

アンチコミューテーター

qf_op_type_anti_commutator

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

警告

ここでの関数のシグネチャはジェネリックです! 実際の演算子では、 OpType は実際の演算子の表記に、 はそれに対応する接頭辞 op_type に置き換えられます(例えば、 は となります ferm_opQfFermionOperator )。

アンチコミューテーターは次のように定義される:

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

パラメーター

  • op_a – 演算子 AA へのポインタ。
  • op_b – 演算子 BB へのポインタ。

戻り値

構築された演算子の反交換子へのポインタ。

例

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

ダブル・コミューテーター

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)

警告

ここでの関数のシグネチャはジェネリックです! 実際の演算子では、 OpType は実際の演算子の表記に、 はそれに対応する接頭辞 op_type に置き換えられます(例えば、 は となります ferm_opQfFermionOperator )。

二重コミューテーターは次のように定義される(『』の第 章 13.6、479ページも参照のこと。 [1]この sign=false 場合 運動方程式による手法、式(2)に [A,B,C][A, B, C] 現れる対称二重コミューテーターである) [2]:

sign が の場合 false、次を返す

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

sign が の場合 true、次を返す

{[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. 分子量子力学の手法。 第2版、アカデミック・プレス、1992年。 ISBN 0-12-486552-6。

[ 2 ]

P. J. オリトラウト、A. ミーセン、I. タヴェルネッリ。 分子量子ダイナミクス:量子コンピューティングの視点から。 Acc. Chem. Res. 54、4229-4238(2021年)。 https://doi.org/10.1021/acs.accounts.1c00514

パラメーター

  • op_a – 演算子 AA へのポインタ。
  • op_b – 演算子 BB へのポインタ。
  • op_c – 演算子 CC へのポインタ。
  • 符号 – 上記の定義に基づく、外側の(反)コミュータートの性質。

戻り値

構築された演算子の反交換子へのポインタ。

例

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

関数

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)

このページは役に立ちましたか?
バグや誤字の報告、またはコンテンツの要求はGitHubで行ってください。