Last Updated on 2023-01-03 by Clay
在前一篇文章,我們了解了一個量子位元可能的機率狀態。我們將把量子位元表達成二維向量,並限制寫成以下格式。
其中 θ
和 ϕ
是實數。在本篇文章中我們會介紹一些閘(gates)—— 亦即能夠改變量子位元狀態的操作。由於部分閘之間具有一定程度的相似性,所以單純列出特性可能會變成純粹的清單列表,所以在文章敘述中加入了一些類似閒聊的題外話來闡述不同的閘所具有的重要觀念。
- 泡利閘(Pauli Gates)
- 1.1 X-Gate
- 1.2 Y & Z-Gate
- X, Y & Z-Bases
- 阿達瑪閘(Hadamard Gate)
- 不同基準的測量
- P-Gate
- I, S & T-Gates
- 6.1 I-Gate
- 6.2 S-Gate
- 6.3 T-Gate
- 通用 U-Gate
在前一篇文章([Qiskit] 量子位元狀態的表示法)中我們已經使用過一些閘來組成古典計算(classical computation)了,接下來我們會發現,在量子電路中有一個重要的特性:在我們初始化量子位元和測量它們之間,我們的所有操作都是可逆的!這些可逆的操作(其實就是邏輯閘)可以被寫成矩陣,並表示為圍繞著布洛赫球面的旋轉。
下面是我們這個章節會用到的套件,可以先匯入。
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. 泡利閘(Pauli Gates)
1.1 X-Gate
X-gate 可以被表示成泡利 x 矩陣:
要查看閘對於量子位元的影響,我們只需要將量子位元的狀態向量乘上閘的矩陣即可。以 X|0⟩
來說:
X-gate 的作用就是翻轉量子位元。比方說將 |0⟩
翻轉成 |1⟩
、將 |1⟩
翻轉成 |0⟩
。
# Let's do an X-gate on a |0> qubit
qc = QuantumCircuit(1)
qc.x(0)
qc.draw()
Output:
# Let's see the result
qc.save_statevector()
qobj = assemble(qc)
state = sim.run(qobj).result().get_statevector()
plot_bloch_multivector(state)
Output:
我們可以看到,|0⟩
確實被翻轉成了 |1⟩
。我們可以把 X-gate 想成古典電路中的 NOT gate。
1.2 Y & Z-Gate
就像 X-gate,Y 泡利矩陣和 Z 泡利矩陣在量子電路中,也以 Y-gate 和 Z-gate 運作著。
Y-gate 除了會翻轉量子位元的狀態外,還會再額外乘上虛部 i
。
Y|1⟩
=i|0⟩
Y|0⟩
=-i|1⟩
Z-gate 則經常用於量子位元糾錯、量子態準備的運算中。我們可以從矩陣中觀察到,在乘以|0⟩
時不會有變化、在乘以|1⟩
時則會變成-|1⟩
。
2. X, Y & Z-basis
這是因為,|0⟩
和 |1⟩
是 Z-gate 的兩個本徵態(eiganstates),也被稱為 Z-basis(Z-基)。
除了 Z-basis 外,也有其他的 basis,如 X-basis,|+⟩
和 |-⟩
:
而 Y-basis 則被寫成 |↺⟩
和 |↻⟩
。
3. 阿達瑪閘(Hadamard Gate)
阿達瑪閘(H-gate)是一個非常基本的量子閘,它讓我們遠離布洛赫球面的兩極並建立一個 |0⟩
和 |1⟩
的疊加態。
4. 不同基準的測量
我們會發現 Z-basis 本質上其實並不特殊,甚至其實存在著幾乎是無限的基準。而也正是因為如此,我們不必總是在 Z-basis 上進行測量,因為量子位元可以在任何基準上測量。
以 X-basis 作為基準進行測量,我們可以計算 |+⟩
或 |−⟩
的機率值。
在測量後,疊加態(superposition)會被摧毀。也因為 Qiskit 原生只支援 Z-basis 上的測量,所以我們若想要在 X-basis 上測量,就必須自己使用 H-gate 來實現。
# 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()
Output:
我們是可以使用兩個 H-gates 來把 Z-gate 轉換成 X-gate:
P-Gate
P-gate(phase gate)是需要一個傳入一個參數 ϕ
才能計算的。簡單來說,P-gate 是在 Z 軸上旋轉 ϕ
度。ϕ
是實數。
在 Qiskit 中,我們使用 .p()
來操作 P-gate。
qc = QuantumCircuit(1)
qc.p(pi/4, 0)
qc.draw()
Output:
你可以會發現,Z-gate 是 P-gate 的一個特殊案例,亦即 ϕ = π
。接下來我們還要談三個在 P-gate 中的常見案例:I-gate、S-gate、T-gate。
6. I, S & T-Gates
6.1 I-Gate
首先是 I-gate,又稱 ID gate 或是 Identity gate(身份閘)。這是一個非常神奇的閘,因為它基本上『什麼事情都不做』。
無論你在量子電路中的任何一個地方應用了 I-gate,它應該都對量子位元沒有任何影響,但它居然是一個閘!神奇吧?這背後其實有兩個原因。
第一是它仍然會應用在計算中,比方說證明 X 是自己的反矩陣:
第二,是在指定需要執行操作時,我們需要填充『什麼都不做』或『None』時非常有用。
6.2 S-Gate
下一個閘則是 S-gate,有時又會被稱呼為 √Z-gate,它是在 P-gate 的旋轉角度 ϕ = π/2
時的情況。它繞著布洛赫球面轉四分之一圈。和本篇文章所介紹的其他門相當不同的是,S-gate 並不是自己的反矩陣。
所以,你會經常看見一個 S†-gate(S-dagger),S†-gate 顯然是 P-gate 旋轉角度 ϕ = −π/2
的情況。
6.3 T-Gate
T-gate 是一個非常常用的閘,是 P-gate 在 ϕ = π/4
的情況。
8. 通用 U Gate
剛剛我們所看到的 I、S、T-gates 都是 p-gate 的特例。下面我們所介紹的 U gate,則是單量子位元最通用的參數化閘。
本篇文章中所提及的閘都可以表示成 U-gate,但是在實際設置量子電路時則很少使用;很有可能是因為難以閱讀的緣故。
我們來看看 U-gate 表示成 H-gate 和 P-gate 的情況。