费米子算符类

我们用如下的记号标识来表示费米子的两个形态, 湮没: \(X\) 表示 \(a_x\) , 创建: \(X +\) 表示 \(a_x^\dagger\) , 例如: "1 + 3 5 + 1"则代表 \(a_1^\dagger \ a_3 \ a_5^\dagger \ a_1\)

整理规则如下

1. 不同数字

\[''1\quad 2'' = -1 * ''2\quad 1''\]
\[''1 + 2 +'' = -1 * ''2 + 1 +''\]
\[''1 + 2'' = -1 * ''2\quad 1 +''\]

2. 相同数字

\[''1\quad 1 + '' = 1 + ''1 + 1''\]
\[''1 + 1 + '' = 0\]
\[''1\quad 1'' = 0\]

PauliOperator 类似,FermionOperator 类也提供了费米子算符之间加、减和乘的基础的运算操作。通过整理功能可以得到一份有序排列的结果。

class FermionOperator

费米子算符类,用于生成和操作费米子算符集合,主要用于量子化学等领域的模拟和计算。

__init__()

初始化 FermionOperator 类的实例。

__init__(scalar: float)

初始化 FermionOperator 类的实例。

参数:

scalar (float) -- 标量值。

__init__(scalar: complex)

初始化 FermionOperator 类的实例。

参数:

scalar (complex) -- 复数标量值。

__init__(term: str, scalar: complex)

初始化 FermionOperator 类的实例。

参数:
  • term (str) -- 项的标识字符串,表示费米子项。

  • scalar (complex) -- 复数标量值。

__init__(terms: Dict[str, complex])

初始化 FermionOperator 类的实例。

参数:

terms (Dict[str, complex]) -- 复数标量值和项的字典,键为项的标识字符串。

data() List[Tuple[Tuple[List[Tuple[int, bool]], str], complex]]

获取费米子算符数据。

返回:

包含费米子项的列表,每个元组为一项,包含项的信息和复数标量值。

返回类型:

List[Tuple[Tuple[List[Tuple[int, bool]], str], complex]]

error_threshold() float

获取误差阈值。

返回:

误差阈值。

返回类型:

float

isEmpty() bool

判断费米子算符是否为空。

返回:

如果费米子算符为空,则为 True,否则为 False。

返回类型:

bool

normal_ordered() FermionOperator

对费米子算符进行正则排序。

返回:

经过正则排序后的费米子算符。

返回类型:

FermionOperator

setErrorThreshold(threshold: float) None

设置误差阈值。

参数:

threshold (float) -- 误差阈值。

toString() str

获取费米子算符的字符串表示。

返回:

费米子算符的字符串表示。

返回类型:

str

to_string() str

获取费米子算符的字符串表示。

返回:

费米子算符的字符串表示。

返回类型:

str

实例

from pyqpanda import *

if __name__=="__main__":

    a = FermionOperator("0 1+", 2)
    b = FermionOperator("2+ 3", 3)

    plus = a + b
    minus = a - b
    muliply = a * b

    print("a + b = ", plus)
    print("a - b = ", minus)
    print("a * b = ", muliply)

    print("normal_ordered(a + b) = ", plus.normal_ordered())
    print("normal_ordered(a - b) = ", minus.normal_ordered())
    print("normal_ordered(a * b) = ", muliply.normal_ordered())
a + b =  {
0 1+ : 2.000000
2+ 3 : 3.000000
}

a - b =  {
0 1+ : 2.000000
2+ 3  : -3.000000
}

a * b =  {
0 1+ 2+ 3 : 6.000000
}

normal_ordered(a + b) =  {
1+ 0 : -2.000000
2+ 3 : 3.000000
}

normal_ordered(a - b) =  {
1+ 0 : -2.000000
2+ 3  : -3.000000
}

normal_ordered(a * b) =  {
2+ 1+ 3 0 : 6.000000
}