![]() |
QPanda3
Supported by OriginQ
|
上一章: QPanda3 教程
下一章: 量子线路与量子程序
在经典计算中,最基本的单位是比特(bit),而最基本的控制单元是逻辑门。我们可以通过逻辑门的组合来控制线路。同样,我们操纵量子比特(qubit)的方式是通过量子逻辑门。通过使用量子逻辑门,我们可以有意识地引导量子态的演化。因此,量子逻辑门构成了量子算法的基础。
量子逻辑门由幺正矩阵(unitary matrix)表示。最常见的量子门通常作用于一个或两个量子比特,就像常见的经典逻辑门作用于一个或两个比特一样。
量子门 | 名称 | 矩阵 |
---|---|---|
I | I | \[\begin{bmatrix} 1 & 0 \\ 0 & 1 \end{bmatrix}\] |
H | Hadamard | \[\begin{bmatrix} \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}} \\ \frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}} \end{bmatrix}\] |
T | T | \[\begin{bmatrix} 1 & 0 \\ 0 & \exp\left(\frac{i\pi}{4}\right) \end{bmatrix}\] |
S | S | \[\begin{bmatrix} 1 & 0 \\ 0 & i \end{bmatrix}\] |
X | Pauli-X | \[\begin{bmatrix} 0 & 1 \\ 1 & 0 \end{bmatrix}\] |
Y | Pauli-Y | \[\begin{bmatrix} 0 & -i \\ i & 0 \end{bmatrix}\] |
Z | Pauli-Z | \[\begin{bmatrix} 1 & 0 \\ 0 & -1 \end{bmatrix}\] |
X1 | X1 | \[\begin{bmatrix} \frac{1}{\sqrt{2}} & -\frac{i}{\sqrt{2}} \\ -\frac{i}{\sqrt{2}} & \frac{1}{\sqrt{2}} \end{bmatrix}\] |
Y1 | Y1 | \[\begin{bmatrix} \frac{1}{\sqrt{2}} & -\frac{1}{\sqrt{2}} \\ \frac{1}{\sqrt{2}} & \frac{1}{\sqrt{2}} \end{bmatrix}\] |
Z1 | Z1 | \[\begin{bmatrix} \exp\left(-\frac{i\pi}{4}\right) & 0 \\ 0 & \exp\left(\frac{i\pi}{4}\right) \end{bmatrix}\] |
RX | RX | \[\begin{bmatrix} \cos\left(\frac{\theta}{2}\right) & -i\sin\left(\frac{\theta}{2}\right) \\ -i\sin\left(\frac{\theta}{2}\right) & \cos\left(\frac{\theta}{2}\right) \end{bmatrix}\] |
RY | RY | \[\begin{bmatrix} \cos\left(\frac{\theta}{2}\right) & -\sin\left(\frac{\theta}{2}\right) \\ \sin\left(\frac{\theta}{2}\right) & \cos\left(\frac{\theta}{2}\right) \end{bmatrix}\] |
RZ | RZ | \[\begin{bmatrix} \exp\left(-\frac{i\theta}{2}\right) & 0 \\ 0 & \exp\left(\frac{i\theta}{2}\right) \end{bmatrix}\] |
U1 | U1 | \[\begin{bmatrix} 1 & 0 \\ 0 & \exp(i\theta) \end{bmatrix}\] |
U2 | U2 | \[\begin{bmatrix} \frac{1}{\sqrt{2}} & -\frac{\exp(i\lambda)}{\sqrt{2}} \\ \frac{\exp(i\phi)}{\sqrt{2}} & \frac{\exp(i\lambda + i\phi)}{\sqrt{2}} \end{bmatrix}\] |
U3 | U3 | \[\begin{bmatrix} \cos\left(\frac{\theta}{2}\right) & -\exp(i\lambda)\sin\left(\frac{\theta}{2}\right) \\ \exp(i\phi)\sin\left(\frac{\theta}{2}\right) & \exp(i\lambda + i\phi)\cos\left(\frac{\theta}{2}\right) \end{bmatrix}\] |
U4 | U4 | \[\begin{bmatrix} u_0 & u_1 \\ u_2 & u_3 \end{bmatrix}\] |
Gate | Name | Matrix |
---|---|---|
CNOT | CNOT | \[\begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 1 \\ 0 & 0 & 1 & 0 \end{bmatrix}\] |
CR | CR | \[\begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & \exp(i\theta) \end{bmatrix}\] |
iSWAP | iSWAP | \[\begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & \cos(\theta) & i\sin(\theta) & 0 \\ 0 & i\sin(\theta) & \cos(\theta) & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}\] |
SWAP | SWAP | \[\begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}\] |
CZ | CZ | \[\begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & -1 \end{bmatrix}\] |
CU | CU | \[\begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & u_0 & u_1 \\ 0 & 0 & u_2 & u_3 \end{bmatrix}\] |
RXX | RXX | \[\begin{bmatrix} \cos(\theta/2) & 0 & 0 & -i\sin(\theta/2) \\ 0 & \cos(\theta/2) & -i\sin(\theta/2) & 0 \\ 0 & -i\sin(\theta/2) & \cos(\theta/2) & 0 \\ -i\sin(\theta/2) & 0 & 0 & \cos(\theta/2) \end{bmatrix}\] |
RYY | RYY | \[\begin{bmatrix} \cos(\theta/2) & 0 & 0 & i\sin(\theta/2) \\ 0 & \cos(\theta/2) & -i\sin(\theta/2) & 0 \\ 0 & -i\sin(\theta/2) & \cos(\theta/2) & 0 \\ i\sin(\theta/2) & 0 & 0 & \cos(\theta/2) \end{bmatrix}\] |
RZZ | RZZ | \[\begin{bmatrix} \exp(-i\theta/2) & 0 & 0 & 0 \\ 0 & \exp(i\theta/2) & 0 & 0 \\ 0 & 0 & \exp(i\theta/2) & 0 \\ 0 & 0 & 0 & \exp(-i\theta/2) \end{bmatrix}\] |
RZX | RZX | \[\begin{bmatrix} \cos(\theta/2) & 0 & -i\sin(\theta/2) & 0 \\ 0 & \cos(\theta/2) & 0 & i\sin(\theta/2) \\ -i\sin(\theta/2) & 0 & \cos(\theta/2) & 0 \\ 0 & i\sin(\theta/2) & 0 & \cos(\theta/2) \end{bmatrix}\] |
Toffoli | Toffoli | \[\begin{bmatrix} 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 \\ 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 \\ \end{bmatrix}\] |
QPanda3 将所有量子逻辑门封装为 API 供用户调用,返回类型为 QGate。例如,如果你想使用 Hadamard 门,可以这样获取:
正如你所见,H
函数仅接收一个量子比特。同样,如果你想使用 RX 门,可以这样获取:
如上所示,RX
函数接受两个参数:第一个是目标量子比特,第二个是旋转角度。RY 和 RZ 门的使用方式相同。
双比特量子逻辑门的使用方式与单比特门类似,但输入参数有所不同。例如,使用 CNOT 门:
CNOT
函数接受两个参数:第一个是控制比特,第二个是目标比特。
在本节中,我们将介绍所有与 QGate 相关的接口。首先,我们需要知道如何导入 QGate
类:
获取比特数量
使用 qubits_num 函数获取该门作用的量子比特数。示例如下所示:
获取所有比特
使用 qubits 函数获取该门作用的所有量子比特。示例如下所示:
获取控制比特
使用 control_qubits 获取该门的控制比特。示例如下所示:
获取目标比特
使用 target_qubits 获取该门的目标比特。示例如下所示:
共轭转置操作(Dagger)
正如本章开始时提到的,所有量子逻辑门都是酉矩阵,且您也可以对量子逻辑门执行共轭转置操作。
QGate
类型目前提供了一个成员函数用于执行共轭转置操作:dagger。dagger
函数会创建当前量子逻辑门的副本,并更新复制门的 dagger 标志。示例如下所示:
幂运算(Gate Power)
使用 power 计算该门的幂次。示例如下所示:
控制操作(Control Operation)
除了共轭转置操作,您还可以向量子逻辑门添加控制量子比特。
在添加控制量子比特后,当前量子逻辑门是否执行取决于控制量子比特的量子态。如果控制量子比特的状态是 \(|1\rangle\),则当前量子逻辑门可以执行;如果状态是 \(|0\rangle\),则该门将不会执行。
QGate
类型目前提供了一个成员函数用于添加控制量子比特:control。control
函数会创建当前量子逻辑门的副本,并将控制量子比特设置到复制的门上。示例如下所示:
清除控制比特
使用 clear_control 清除控制比特。示例如下所示:
获取矩阵表示
使用 matrix 获取矩阵形式。
False
时,CNOT(1,0)
的矩阵与 CNOT(0,1)
的矩阵是等价的。示例如下所示:
获取门类型
使用 gate_type 函数来获取门类型。示例如下所示:
获取和设置参数
使用 parameters 函数来获取门的参数。使用 set_parameters 函数来设置门的参数。示例如下所示:
获取门名称
使用 name 函数来获取门的名称。示例如下所示: