哈密顿量模拟
哈密顿量以威廉·罗文·汉密尔顿(William Rowan Hamilton)命名,他也创造了牛顿力学的革命性改革,现在称为哈米尔顿力学,这在量子物理学中是重要的。 哈密顿量是所有粒子的动能的总和加上与系统相关的粒子的势能。 对于不同的情况或数量的粒子,哈密顿量是不同的,因为它包括粒子的动能之和以及对应于这种情况的势能函数。
指数上的哈密顿量
在量子力学中,波函数 \(\Psi( |t \rangle)\) 的时间演化由含时薛定谔方程控制。
将普朗克常量视为1,将积分上下限分别定为 0、t,并经过一系列数学运算后,可以得到 \(\Psi( |t \rangle) = e^{-iHt} \Psi( |0 \rangle)\)
哈密顿量模拟的复杂性
哈密顿量(哈密顿算符)在数学上被表示为Hermitian矩阵,而随着qubit数量的增加,其希尔伯特空间是指数增长的,相对应的哈密顿量的维度也是呈指数增长。 因此,需要使用一些近似方法,最简单的近似方法就是在关于矩阵的矩阵的泰勒展开式 \(\Psi( |t \rangle) \approx (I-iHt) \Psi( |0 \rangle)\) 通过更高阶的近似,可以得到更高的精度逼近。
模拟步骤及相关接口介绍
step1:构造相关矩阵;
step2:构造模拟线路;
step3:使用 QOperator 操作将线路构造成算符操作,并获取线路的对应矩阵;
step4:使用 expMat() 接口计算 e 的复数矩阵的真实值;
step4:使用 average_gate_fidelity() 接口计算两个矩阵的相似度;
示例
Pauli-算符模拟
import math
import numpy as np
import pyqpanda as pq
if __name__ == "__main__":
pq.init(pq.QMachineType.CPU)
q = pq.qAlloc_many(4)
# 构建pauli 算子
X = np.mat([[0, 1], [1, 0]])
Y = np.mat([[0, -1j], [1j, 0]])
Z = np.mat([[1, 0], [0, -1]])
t = np.pi
circuit_x = pq.create_empty_circuit()
circuit_y = pq.create_empty_circuit()
circuit_z = pq.create_empty_circuit()
# 构造Hamiltonian Operator
circuit_x << pq.H(q[0]) \
<< pq.X(q[0]) \
<< pq.RZ(q[0], -t) \
<< pq.X(q[0]) \
<< pq.RZ(q[0], t) \
<< pq.H(q[0])
circuit_y << pq.RX(q[0], t / 2) \
<< pq.X(q[0]) \
<< pq.RZ(q[0], -t) \
<< pq.X(q[0]) \
<< pq.RZ(q[0], t) \
<< pq.RX(q[0], -t / 2)
circuit_z << pq.X(q[0]) \
<< pq.RZ(q[0], -t) \
<< pq.X(q[0]) \
<< pq.RZ(q[0], t)
operator_x = pq.QOperator(circuit_x)
operator_y = pq.QOperator(circuit_y)
operator_z = pq.QOperator(circuit_z)
unitary_x = operator_x.get_matrix()
unitary_y = operator_y.get_matrix()
unitary_z = operator_z.get_matrix()
conf = complex(0, -1)
U_x = pq.expMat(conf, X, t)
U_y = pq.expMat(conf, Y, t)
U_z = pq.expMat(conf, Z, t)
f_ave_x = pq.average_gate_fidelity(U_x, unitary_y)
f_ave_y = pq.average_gate_fidelity(U_y, unitary_y)
f_ave_z = pq.average_gate_fidelity(U_z, unitary_z)
print("Pauli-X Average Gate Fidelity: F = {:f}".format(f_ave_x))
print("Pauli-Y Average Gate Fidelity: F = {:f}".format(f_ave_y))
print("Pauli-Z Average Gate Fidelity: F = {:f}".format(f_ave_z))
运行结果如下:
Pauli-X Average Gate Fidelity: F = 1.000000
Pauli-Y Average Gate Fidelity: F = 1.000000
Pauli-Z Average Gate Fidelity: F = 1.000000