paddle_quantum.trotter
Trotter 哈密顿量时间演化的功能实现。
- construct_trotter_circuit(circuit, hamiltonian, tau, steps, method='suzuki', order=1, grouping=None, coefficient=None, permutation=None)
向 circuit 的后面添加 trotter 时间演化电路,即给定一个系统的哈密顿量 H,该电路可以模拟系统的时间演化 \(U_{cir} e^{-iHt}\)。
- 参数:
circuit (Circuit) – 需要添加时间演化电路的 Circuit 对象。
hamiltonian (Hamiltonian) – 需要模拟时间演化的系统的哈密顿量 H。
tau (float) – 每个 trotter 块的演化时间长度。
steps (int) – 添加多少个 trotter 块。(提示:
steps * tau
即演化的时间总长度 t)method (str, optional) – 搭建时间演化电路的方法,默认为
'suzuki'
,即使用 Trotter-Suzuki 分解。可以设置为'custom'
来使用自定义的演化策略。(需要用 permutation 和 coefficient 来定义)。order (int, optional) – Trotter-Suzuki decomposition 的阶数,默认为
1
,仅在使用method='suzuki'
时有效。grouping (str, optional) – 是否对哈密顿量进行指定策略的重新排列,默认为
None
,支持'xyz'
和'even_odd'
两种方法。coefficient (np.ndarrayorpaddle.Tensor, optional) – 自定义时间演化电路的系数,对应哈密顿量中的各项,默认为
None
,仅在method='custom'
时有效。permutation (np.ndarray, optional) – 自定义哈密顿量的排列方式,默认为
None
,仅在method='custom'
时有效。
- 抛出:
ValueError – Trotter-Suzuki 分解的阶数
order
必须为1
,2
, 或2k
, 其中k
是一个整数ValueError –
permutation
和coefficient
的形状不一致ValueError – 重排策略
grouping
的方法不支持, 仅支持'xyz'
,'even_odd'
ValueError – 搭建时间演化电路的方法
method
不支持, 仅支持'suzuki'
,'custom'
提示
想知道该函数是如何模拟的?更多信息请移步至量桨官网教程: https://qml.baidu.com/tutorials/overview.html.
- optimal_circuit(circuit, theta, which_qubits)
添加一个优化电路,哈密顿量为’XXYYZZ’。
- 参数:
circuit (paddle_quantum.ansatz.Circuit) – 需要添加门的电路。
theta (Union[paddle.Tensor, float]) – 旋转角度需要传入三个参数。
which_qubits (Iterable) –
pauli_word
中的每个算符所作用的量子比特编号。
- paddle_quantum.trotter.add_n_pauli_gate(circuit, theta, pauli_word, which_qubits)
添加一个对应着 N 个泡利算符张量积的旋转门,例如 \(e^{-\theta/2 \cdot X\otimes I\otimes X\otimes Y}\)。
- 参数:
circuit (paddle_quantum.ansatz.Circuit) – 需要添加门的电路。
theta (Union[paddle.Tensor, float]) – 旋转角度。
pauli_word (str) – 泡利算符组成的字符串,例如
"XXZ"
。which_qubits (Iterable) –
pauli_word
中的每个算符所作用的量子比特编号。
- 抛出:
ValueError – The
which_qubits
需要为list
,tuple
, 或者np.ndarray
格式。
- get_suzuki_permutation(length, order)
计算 Suzuki 分解对应的置换数组。
- 参数:
length (int) – 对应哈密顿量中的项数,即需要置换的项数。
order (int) – Suzuki 分解的阶数。
- 返回:
置换数组。
- 返回类型:
np.ndarray
- get_suzuki_p_values(k)
计算 Suzuki 分解中递推关系中的因数 p(k)。
- 参数:
k (int) – Suzuki 分解的阶数。
- 返回:
一个长度为 5 的列表,其形式为 [p, p, (1 - 4 * p), p, p]。
- 返回类型:
list
- get_suzuki_coefficients(length, order)
计算 Suzuki 分解对应的系数数组。
- 参数:
length (int) – 对应哈密顿量中的项数,即需要置换的项数。
order (int) – Suzuki 分解的阶数。
- 返回:
系数数组。
- 返回类型:
np.ndarray
- get_1d_heisenberg_hamiltonian(length, j_x=1.0, j_y=1.0, j_z=1.0, h_z=0.0, periodic_boundary_condition=True)
生成一个一维海森堡链的哈密顿量。
- 参数:
length (int) – 链长。
j_x (float, optional) – x 方向的自旋耦合强度 Jx,默认为
1
。j_y (float, optional) – y 方向的自旋耦合强度 Jy,默认为
1
。j_z (float, optional) – z 方向的自旋耦合强度 Jz,默认为
1
。h_z (floatornp.ndarray, optional) – z 方向的磁场,默认为
0
,若输入为单个 float 则认为是均匀磁场。(施加在每一个格点上)periodic_boundary_condition (bool, optional) – 是否考虑周期性边界条件,即 l + 1 = 0,默认为
True
。
- 返回:
该海森堡链的哈密顿量。
- 返回类型: