Qiskit汉化-1.4Single Qubit Gates

单量子比特门

在上一节中,我们研究了量子比特可能处于的所有可能状态。我们看到量子比特可以用 2D 向量表示,并且它们的状态仅限于以下形式:

$$
|q\rangle = \cos{\tfrac{\theta}{2}}|0\rangle + e^{i\phi}\sin{\tfrac{\theta}{2}}|1\rangle
$$

$θ$和$φ$是实数。在本节中,我们将介绍门,即在这些状态之间更改量子比特的操作。由于门的数量和它们之间的相似性,本章有可能成为列表。为了解决这个问题,我们包括了一些题外话,在整个章节的适当位置介绍重要的想法。

目录

[toc]

计算的原子中,我们遇到了一些门,并使用它们来执行经典计算。量子电路的一个重要特性是,在初始化量子比特和测量它们之间,操作(门)总是可逆的!这些可逆门可以表示为矩阵,以及围绕布洛赫球体的旋转。

from qiskit import QuantumCircuit, assemble, Aer
from math import pi, sqrt
from qiskit.visualization import plot_bloch_multivector, plot_histogram
sim = Aer.get_backend('aer_simulator')

1.泡利门

您应该熟悉线性代数部分中的泡利矩阵。如果这里的任何数学对你来说是新的,你应该使用线性代数部分来提高自己的速度。我们将在这里看到泡利矩阵可以表示一些非常常用的量子门。

1.1 X-门

X门由泡利-X矩阵表示:

$$
X = \begin{bmatrix} 0 & 1 \ 1 & 0 \end{bmatrix} = |0\rangle\langle1| + |1\rangle\langle0|
$$

要查看门对量子比特的影响,我们只需将量子比特的状态向量乘以门。我们可以看到X门切换了状态的幅度$|0⟩$和$|1⟩$:

$$
X|0\rangle = \begin{bmatrix} 0 & 1 \ 1 & 0 \end{bmatrix}\begin{bmatrix} 1 \ 0 \end{bmatrix} = \begin{bmatrix} 0 \ 1 \end{bmatrix} = |1\rangle
$$

提醒:将向量乘以矩阵(单击此处展开)

矩阵乘法是我们在上一章中看到的内积的推广。在将向量乘以矩阵的特定情况下(如上所示),我们总是得到一个向量:

$$
M|v\rangle = \begin{bmatrix}a & b \ c & d \\end{bmatrix}\begin{bmatrix}v_0 \ v_1 \\end{bmatrix}
= \begin{bmatrix}a\cdot v_0 + b \cdot v_1 \ c \cdot v_0 + d \cdot v_1\end{bmatrix}
$$

在量子计算中,我们可以用基向量来编写矩阵:

$$
X = |0\rangle\langle1| + |1\rangle\langle0|
$$

这有时比使用矩阵图更清晰,因为我们可以看到不同的乘法会导致什么:
$$
\begin{aligned}
X|1\rangle & = (|0\rangle\langle1| + |1\rangle\langle0|)|1\rangle \
& = |0\rangle\langle1|1\rangle + |1\rangle\langle0|1\rangle \
& = |0\rangle \times 1 + |1\rangle \times 0 \
& = |0\rangle
\end{aligned}
$$

事实上,当我们看到一个 ket 和一个bra像这样乘以时:

$$
|a\rangle\langle b|
$$

这称为外积,它遵循以下规则:

$$
|a\rangle\langle b| =
\begin{bmatrix}
a_0 b_0^* & a_0 b_1^* & \dots & a_0 b_n^\
a_1 b_0^
& \ddots & & \vdots \
\vdots & & \ddots & \vdots \
a_n b_0^* & \dots & \dots & a_n b_n^* \
\end{bmatrix}

$$

$∗$表示复共轭。我们可以看到,这确实会产生上面所示的x矩阵:
$$
|0\rangle\langle1| + |1\rangle\langle0| =
\begin{bmatrix}0 & 1 \ 0 & 0 \\end{bmatrix} +
\begin{bmatrix}0 & 0 \ 1 & 0 \\end{bmatrix} =
\begin{bmatrix}0 & 1 \ 1 & 0 \\end{bmatrix} = X
$$

在Qiskit中,我们可以创建一个短电路来验证这一点:

# Let's do an X-gate on a |0> qubit
qc = QuantumCircuit(1)
qc.x(0)
qc.draw()

1

让我们看看上述电路的结果。注意:
这里我们使用plot_bloch_multivector(),它接受量子比特的状态向量而不是布洛赫向量。

# Let's see the result
qc.save_statevector()
qobj = assemble(qc)
state = sim.run(qobj).result().get_statevector()
plot_bloch_multivector(state)

2

我们确实可以看到量子比特的状态如预期的那样是$|1⟩$。我们可以认为这是围绕布洛赫球的x轴旋转π弧度。X-门也经常被称为“非门”,指的是它的经典模拟物。

1.2 Y&Z-门

与X门类似,Y&Z泡利矩阵在我们的量子电路中也充当Y&Z门:

$$
Y = \begin{bmatrix} 0 & -i \ i & 0 \end{bmatrix} \quad\quad\quad\quad Z = \begin{bmatrix} 1 & 0 \ 0 & -1 \end{bmatrix}
$$

$$
Y = -i|0\rangle\langle1| + i|1\rangle\langle0| \quad\quad Z = |0\rangle\langle0| - |1\rangle\langle1|
$$

而且,不出所料,它们还分围绕布洛赫球的 y 轴和z轴旋转π。

下面是一个显示布洛赫球上量子比特状态的部件,按下其中一个按钮将对量子比特执行门:

# Run the code in this cell to see the widget
from qiskit_textbook.widgets import gate_demo
gate_demo(gates='pauli')

3

在Qiskit中,我们可以使用以下方法将Y和Z门应用于我们的电路:

qc.y(0) # Do Y-gate on qubit 0
qc.z(0) # Do Z-gate on qubit 0
qc.draw()

4

2.题外话:X、Y&Z基

提醒:矩阵的特征向量(单击此处展开)

我们已经看到,将向量乘以矩阵会产生一个向量:

$$
M|v\rangle = |v’\rangle \leftarrow \text{new vector}
$$

如果我们选择了正确的向量和矩阵,我们可以找到一种情况,其中这种矩阵乘法与乘以标量相同:

$$
M|v\rangle = \lambda|v\rangle
$$

(上面,$M$是一个矩阵,$λ$是一个标量)。对于矩阵$M$,任何具有这个性质的向量称为M的特征向量。例如,Z-矩阵的特征向量是状态$|0⟩$和$|1⟩$:

$$
\begin{aligned}
Z|0\rangle & = |0\rangle \
Z|1\rangle & = -|1\rangle
\end{aligned}
$$

由于我们使用向量来描述量子比特的状态,在这种情况下,我们通常称这些向量为本征态。特征向量在量子计算中非常重要,扎实地掌握它们非常重要。

您可能还会注意到,当Z门处于这两种状态中的任何一种时,它似乎对我们的量子比特没有影响。这是因为状态$|0⟩$和$|1⟩$是Z门的两个本征态。事实上,计算基(由状态$|0⟩$和$|1⟩$形成的基)通常被称为Z基。这不是我们可以使用的唯一的基,一个流行的基是X基,由X门的本征态组成。我们称这两个向量为$|+⟩$和$|-⟩$:

$$
|+\rangle = \tfrac{1}{\sqrt{2}}(|0\rangle + |1\rangle) = \tfrac{1}{\sqrt{2}}\begin{bmatrix} 1 \ 1 \end{bmatrix}
$$

$$
|-\rangle = \tfrac{1}{\sqrt{2}}(|0\rangle - |1\rangle) = \tfrac{1}{\sqrt{2}}\begin{bmatrix} 1 \ -1 \end{bmatrix}
$$

另一种不太常用的基是由Y门的本征态形成的。它们被称为:

$$
|\circlearrowleft\rangle, \quad |\circlearrowright\rangle
$$

我们把计算这些留作练习。事实上,有无限多的基;为了形成一个,我们只需要两个正交的向量。厄米矩阵和酉矩阵的特征向量构成向量空间的一组基。由于这个性质,我们可以确定X门和Y门的本征态确实构成了1量子比特态的基础(在附录的线性代数中阅读更多有关这方面的内容)

快速练习

1.验证$|+⟩$和$|-⟩$实际上是X门的本征态。

2.它们有什么特征值?

3.找到Y门的本征态,以及它们在布洛赫球面上的坐标。

仅使用泡利门,不可能将我们的初始量子比特移动到除$|0⟩$或$|1⟩$以外的任何状态,即我们无法实现叠加。这意味着我们看不到与经典比特不同的行为。为了创建更多有趣的状态,我们需要更多的门!

3.哈达玛门

哈达玛门(H门)是一种基本的量子门。它允许我们远离布洛赫球面的极点,并创建一个$|0⟩$和$|1⟩$的叠加。它有这样一个矩阵:

$$
H = \tfrac{1}{\sqrt{2}}\begin{bmatrix} 1 & 1 \ 1 & -1 \end{bmatrix}
$$

我们可以看到,这将执行以下转换:

$$
H|0\rangle = |+\rangle
$$

$$
H|1\rangle = |-\rangle
$$

这可以被认为是围绕布洛赫向量[1,0,1](X轴和Z轴之间的线)的旋转,或者是在X和Z基之间转换量子比特的状态。

你可以使用下面的小部件来摆弄这些门:

# Run the code in this cell to see the widget
from qiskit_textbook.widgets import gate_demo
gate_demo(gates='pauli+h')

5

快速练习

1.将H门转换为$|0⟩$、$|1⟩$、$|+⟩$和$|-⟩$外积的形式。

2.表明将门序列:HZH应用于任何量子比特状态等同于应用X门。

3.找到与Y门等价的X, Z和H门的组合(忽略全局相位)。

4.题外话:以不同的基测量

我们已经知道Z基在本质上并不特殊,还有无限多的其他基。与测量类似,我们并不总是必须在计算基(Z基)中测量,我们可以在任何基中测量我们的量子比特。

例如,让我们尝试测量X基。我们可以计算测量值为$|+⟩$或$|-⟩$的概率:

$$
p(|+\rangle) = |\langle+|q\rangle|^2, \quad p(|-\rangle) = |\langle-|q\rangle|^2
$$

经过测量,叠加态被破坏了。由于Qiskit只允许测量z基,我们必须使用哈达玛门创建自己的Z基:

# Create the X-measurement function:
def x_measurement(qc, qubit, cbit):
    """Measure 'qubit' in the X-basis, and store the result in 'cbit'"""
    qc.h(qubit)
    qc.measure(qubit, cbit)
    return qc

initial_state = [1/sqrt(2), -1/sqrt(2)]
# Initialize our qubit and measure it
qc = QuantumCircuit(1,1)
qc.initialize(initial_state, 0)
x_measurement(qc, 0, 0)  # measure qubit 0 to classical bit 0
qc.draw()

6

在上面的快速练习中,我们看到您可以通过将 Z 门夹在两个 H 门之间来创建 X 门:

$$
X = HZH
$$

从 Z 基开始,H 门将我们的量子比特切换到 X 基,Z 门在 X 基中执行 NOT,最后的 H 门将我们的量子比特返回到 Z 基。我们可以通过乘以矩阵来验证它总是像 X 门一样:

$$
HZH =
\tfrac{1}{\sqrt{2}}\begin{bmatrix} 1 & 1 \ 1 & -1 \end{bmatrix}
\begin{bmatrix} 1 & 0 \ 0 & -1 \end{bmatrix}
\tfrac{1}{\sqrt{2}}\begin{bmatrix} 1 & 1 \ 1 & -1 \end{bmatrix}

\begin{bmatrix} 0 & 1 \ 1 & 0 \end{bmatrix}
=X
$$

遵循同样的逻辑,我们通过在测量之前将x基转换为z基来创建x -测量。由于测量过程可以根据系统的不同而产生不同的影响(例如,一些系统在测量后总是将量子比特返回到|0⟩,而其他系统可能将其保留为测量状态),测量后的量子比特状态是未定义的,如果我们想再次使用它,我们必须重置它。

还有另一种方法可以看出为什么哈达玛门确实把我们从Z基带到了X基。假设我们要在x基中测量的量子比特处于(归一化)状态$a |0\rangle + b |1\rangle$。为了在X基中测量它,我们首先将状态表示为|+⟩和|-⟩的线性组合。使用关系$|0\rangle = \frac{|+\rangle + |-\rangle}{\sqrt{2}}
$和$|1\rangle = \frac{|+\rangle - |-\rangle}{\sqrt{2}}$,状态变成$\frac{a + b}{\sqrt{2}}|+\rangle + \frac{a - b}{\sqrt{2}}|-\rangle$。观察X基的概率振幅可以通过在Z基表示的状态向量上应用哈达玛矩阵得到。

现在让我们看看结果:

qobj = assemble(qc)  # Assemble circuit into a Qobj that can be run
counts = sim.run(qobj).result().get_counts()  # Do the simulation, returning the state vector
plot_histogram(counts)  # Display the output on measurement of state vector

7

我们在状态中初始化了量子比特$|-⟩$,但是我们可以看到,在测量之后,我们已经将量子比特折叠到状态$|1⟩$。如果再次运行该单元,您将看到相同的结果,因为沿着X基础,状态$|-⟩$是一个基态,沿X 测量它总是会产生相同的结果。

快速练习

1.如果我们在状态中初始化我们的量子比特$|+⟩$,在状态下测量它的概率是多少$|-⟩$?

2.使用Qiskit测量一个$|0⟩$量子比特显示在状态$|+⟩$和$|-⟩$的概率(提示:您可能想使用。get_counts()plot_histogram())。

3.试着创建一个以Y为基的函数。

在不同的基准上进行测量,可以让我们看到海森堡著名的不确定性原理在起作用。在Z基中测量状态的确定性消除了在X基中测量特定状态的所有确定性,反之亦然。一个常见的误解是,不确定性是由于我们设备的限制,但在这里我们可以看到,不确定性实际上是量子比特的性质的一部分。

例如,如果我们将量子比特置于状态$|0⟩$, 我们在Z基中的测量肯定是$|0⟩$,但我们在X基中的测量是完全随机的!类似地,如果我们将量子比特置于状态$|-⟩$,我们在X基中的测量肯定是$|-⟩$,但现在在Z基中的任何测量将是完全随机的。

更一般地说:无论我们的量子系统处于什么状态,总有一个测量具有确定性的结果。

H门的引入使我们能够探索一些有趣的现象,但我们在量子操作方面仍然非常有限。现在让我们介绍一种新型的门:

5. P门

P门(相位门)是参数化的,也就是说,它需要一个数字(ϕ)来告诉它具体做什么。P-门围绕Z轴方向旋转ϕ。它的形式为矩阵:
$$
P(\phi) = \begin{bmatrix} 1 & 0 \ 0 & e^{i\phi} \end{bmatrix}
$$
ϕ是实数。
你可以使用下面的小组件来操作P门,用slider指定ϕ:

# Run the code in this cell to see the widget
from qiskit_textbook.widgets import gate_demo
gate_demo(gates='pauli+h+p')

在Qiskit中,我们使用p(phi, qubit)指定P门:

qc = QuantumCircuit(1)
qc.p(pi/4, 0)
qc.draw()

9

你可能会注意到Z门是P门的一种特殊情况,具有ϕ=π
。实际上,本章还会提到三个更常用的P门,它们都是P门的特殊情况。

6. I、S和T门

6.1 I门

首先是I门(又名“身份门”或“身份门”)。这只是一个什么都不做的门。它的矩阵是单位矩阵:

$$
I = \begin{bmatrix} 1 & 0 \ 0 & 1\end{bmatrix}
$$

在电路中的任何地方应用身份门应该不会对量子比特状态产生影响,所以有趣的是,它甚至被视为一个门。这背后有两个主要原因,一个是它经常用于计算,例如:证明X门是它自己的逆:

$$
I = XX
$$

其次,在考虑实际硬件时,指定nothingnone操作通常是有用的。

快速练习

1.I门的本征态是什么?

6.2 S门

下一个要提到的门是S门(有时被称为$\sqrt{Z}
$门),这是一个P门,ϕ=π/2。它绕着布洛赫球体转了四分之一圈。需要注意的是,与本章到目前为止介绍的所有门不同,S门并不是它自己的逆!因此,您将经常看到$S^†$门(也叫做“S-dagger”, “Sdg” 或$\sqrt{Z}^\dagger$门)。$S^†$门显然是一个P门,ϕ=−π/2:

$$
S = \begin{bmatrix} 1 & 0 \ 0 & e^{\frac{i\pi}{2}} \end{bmatrix}, \quad S^\dagger = \begin{bmatrix} 1 & 0 \ 0 & e^{-\frac{i\pi}{2}} \end{bmatrix}
$$

之所以叫“$\sqrt{Z}$门”,是因为两个连续应用的S门与一个Z门具有相同的效果:

$$
SS|q\rangle = Z|q\rangle
$$

这种符号在量子计算中很常见。

在Qiskit中添加S门:

qc = QuantumCircuit(1)
qc.s(0)   # Apply S-gate to qubit 0
qc.sdg(0) # Apply Sdg-gate to qubit 0
qc.draw()

10

6.3 T门

T型门是一种非常常用的门,它是带有P形门 $φ=π/4$:
$$
T = \begin{bmatrix} 1 & 0 \ 0 & e^{\frac{i\pi}{4}} \end{bmatrix}, \quad T^\dagger = \begin{bmatrix} 1 & 0 \ 0 & e^{-\frac{i\pi}{4}} \end{bmatrix}
$$
与S门一样,T门有时也被称为$\sqrt[4]{Z}$门。

在Qiskit中:

qc = QuantumCircuit(1)
qc.t(0)   # Apply T-gate to qubit 0
qc.tdg(0) # Apply Tdg-gate to qubit 0
qc.draw()

11

您可以使用下面的小部件来尝试本章中介绍的所有门:

# Run the code in this cell to see the widget
from qiskit_textbook.widgets import gate_demo
gate_demo()

7. U型门

正如我们之前看到的,I,Z,S和T门都是更一般的P门的特例。同样,U 门是所有单量子比特量子门中最通用的。它是以下形式的参数化门:

$$
U(\theta, \phi, \lambda) = \begin{bmatrix} \cos(\frac{\theta}{2}) & -e^{i\lambda}\sin(\frac{\theta}{2}) \
e^{i\phi}\sin(\frac{\theta}{2}) & e^{i(\phi+\lambda)}\cos(\frac{\theta}{2})
\end{bmatrix}
$$

本章中的每个门都可以指定为$U(\theta,\phi,\lambda)$,但很少在电路图中看到它,可能是由于阅读困难。

作为一个例子,我们看到了U门的一些具体情况,在这些情况下,它分别等价于H门和P门。

$$
\begin{aligned}
U(\tfrac{\pi}{2}, 0, \pi) = \tfrac{1}{\sqrt{2}}\begin{bmatrix} 1 & 1 \
1 & -1
\end{bmatrix} = H
& \quad &
U(0, 0, \lambda) = \begin{bmatrix} 1 & 0 \
0 & e^{i\lambda}\
\end{bmatrix} = P
\end{aligned}
$$

# Let's have U-gate transform a |0> to |+> state
qc = QuantumCircuit(1)
qc.u(pi/2, 0, pi, 0)
qc.draw()

13

# Let's see the result
qc.save_statevector()
qobj = assemble(qc)
state = sim.run(qobj).result().get_statevector()
plot_bloch_multivector(state)

14

很明显,可能的门有无数种,其中也包括$R_x$和$R_y$门,尽管这里没有提到它们。必须注意的是,Z基没有什么特别之处,除了它被选择为标准的计算基。Qiskit还提供了S和Sdg门的X等价物,即SX门和SXdg门。这些门围绕布洛赫球面围绕X轴做1/4转,是$R_x$门的一个特殊情况。

在真正的IBM量子硬件上运行之前,所有单量子比特操作都被编译为$I,X,SX,R_Z$。由于这个原因,它们有时被称为物理门

8. 额外的资源

您可以在这里找到社区创建的备查表,其中包含一些常见的量子门及其属性。

import qiskit.tools.jupyter
%qiskit_version_table

版本信息

Qiskit Software Version
qiskit-terra 0.22.3
qiskit-aer 0.11.1
qiskit-ibmq-provider 0.19.2
qiskit 0.39.3
System information
System information 3.7.12
Python compiler GCC 9.4.0
Python build default, Oct 26 2021 06:08:53
OS Linux
CPUs 4
Memory (Gb) 51.00146484375