整流子式発電機
演算子表現は、さまざまな交換子の計算に効率的な関数を提供します。 これらの関数はジェネリックな演算子の表現(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 )。
コミューテータは次のように定義される:
パラメーター
- op_a – 演算子 へのポインタ。
- op_b – 演算子 へのポインタ。
戻り値
構築された演算子コミューテーターへのポインタ。
例
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 )。
アンチコミューテーターは次のように定義される:
パラメーター
- op_a – 演算子 へのポインタ。
- op_b – 演算子 へのポインタ。
戻り値
構築された演算子の反交換子へのポインタ。
例
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)に 現れる対称二重コミューテーターである) [2]:
sign が の場合 false、次を返す
sign が の場合 true、次を返す
[ 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 – 演算子 へのポインタ。
- op_b – 演算子 へのポインタ。
- op_c – 演算子 へのポインタ。
- 符号 – 上記の定義に基づく、外側の(反)コミュータートの性質。
戻り値
構築された演算子の反交換子へのポインタ。
例
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)