跳轉到

3.1 單量子位元閘 H、X、Z#

概念說明#

單量子位元閘是 \(2\times2\) 么正矩陣,對應布洛赫球上的旋轉:

閘 矩陣 作用 布洛赫球意義
\(X\) \(\begin{pmatrix}0&1\\1&0\end{pmatrix}\) $ 0\rangle!\leftrightarrow!
\(Z\) \(\begin{pmatrix}1&0\\0&-1\end{pmatrix}\) $ 1\rangle \to -
\(H\) \(\frac{1}{\sqrt2}\begin{pmatrix}1&1\\1&-1\end{pmatrix}\) $ 0\rangle!\to!
\(S\) \(\mathrm{diag}(1,i)\) $ 1\rangle \to i
\(T\) \(\mathrm{diag}(1, e^{i\pi/4})\) 加 \(\pi/4\) 相位 繞 z 軸轉 \(45°\)

三個關鍵觀察:

  1. H 產生疊加: \(H|0\rangle = \frac{|0\rangle+|1\rangle}{\sqrt2} = |+\rangle\) 。這是所有量子演算法的第一步。
  2. Z 改變相位不改變機率:對 \(|+\rangle\) 作用 Z 得 \(\frac{|0\rangle-|1\rangle}{\sqrt2}=|-\rangle\) ,測量機率仍是 50/50,但相位資訊藏在相對符號裡。Grover 演算法(第 6 章)正是靠相位操作累積出可測量的差異。
  3. H 的共軛性質: \(HXH = Z\) 、 \(HZH = X\) 、 \(H^2 = I\) 。H 是「把 x 軸與 z 軸互換」的轉換。

演算法步驟(模擬單閘電路)#

  1. 初始化狀態向量為基底態。
  2. 依電路順序,把每個閘的矩陣乘上狀態向量。
  3. 最後取振幅平方得到測量機率分佈。

Python 範例#

import numpy as np

X = np.array([[0, 1], [1, 0]], dtype=complex)
Z = np.array([[1, 0], [0, -1]], dtype=complex)
H = np.array([[1, 1], [1, -1]], dtype=complex) / np.sqrt(2)
S = np.array([[1, 0], [0, 1j]], dtype=complex)
T = np.array([[1, 0], [0, np.exp(1j*np.pi/4)]], dtype=complex)

ket0 = np.array([1, 0], dtype=complex)

def run(gates, init=ket0):
    psi = init.copy()
    for g in gates:
        psi = g @ psi
    return psi

psi = run([H, S])            # |0> -> |+> -> 加 i 相位
print("H·S|0> =", np.round(psi, 3))
print("機率分佈:", np.abs(psi)**2)   # [0.5, 0.5]

# 驗證共軛關係
print("HXH == Z:", np.allclose(H @ X @ H, Z))
print("H^2 == I:", np.allclose(H @ H, np.eye(2)))

# X·X = I:量子閘是可逆的
print("XX|0> =", run([X, X]))

複雜度分析#

單一單量子位元閘在 \(n\) 位元狀態向量上:作用在第 0 個(最低位)位元時可向量化地一次更新所有振幅對,成本 \(O(2^n)\) ;純矩陣乘法 \(2\times2 \cdot 2^n\) 亦是 \(O(2^n)\) 。模擬長度 \(m\) 的電路總成本 \(O(m\,2^n)\) 。

練習#

  1. 計算 \(TH\) 作用在 \(|0\rangle\) 的結果,並求各基底態的測量機率。
  2. 證明 \(X = HR_z(\pi)H\) (其中 \(R_z(\theta)=\mathrm{diag}(e^{-i\theta/2},e^{i\theta/2})\) ),這是「Z 型閘可轉成 X 型閘」的例子。
  3. (程式)用 run 函式驗證:對 \(|+\rangle\) 交替作用 Z 與 H,兩次後回到 \(|+\rangle\) ;說明為什麼。