2.2 么正矩陣與量子閘#
概念說明#
量子力學第二條基本原理:封閉系統的演化由么正算子描述。一個矩陣 \(U\) 是么正的,若且唯若
\[ U^\dagger U = UU^\dagger = I \]
其中 \(U^\dagger\) 是共軛轉置(先轉置再取每個元素的共軛)。么正性帶來三個直接後果:
- 守恆機率: \(\|U\psi\| = \|\psi\|\) ,演化不會改變向量的長度,因此總機率永遠是 1。
- 可逆: \(U^{-1} = U^\dagger\) ,量子計算(測量前)本質上是可逆計算。
- 保持內積: \(\langle U\phi | U\psi\rangle = \langle\phi|\psi\rangle\) ,正交態經演化後仍正交。
量子閘就是小的么正矩陣。單量子位元最重要的幾個:
- Pauli 矩陣: \(X=\begin{pmatrix}0&1\\1&0\end{pmatrix}\) (位元翻轉)、 \(Z=\begin{pmatrix}1&0\\0&-1\end{pmatrix}\) (相位翻轉)、 \(Y\) ;
- Hadamard: \(H=\frac{1}{\sqrt{2}}\begin{pmatrix}1&1\\1&-1\end{pmatrix}\) ,把 \(|0\rangle\) 變成均勻疊加 \(|+\rangle\) ;
- 相位閘 \(S = \mathrm{diag}(1, i)\) 與旋轉閘 \(R_\theta = \begin{pmatrix}\cos\theta & -\sin\theta \\ \sin\theta & \cos\theta\end{pmatrix}\) 。
每一個都是么正矩陣,可以直接驗證。
演算法步驟#
- 定義矩陣 \(U\) (複數 numpy 陣列)。
- 驗證么正性:
np.allclose(U.conj().T @ U, np.eye(2))。 - 將閘作用於態:
new_state = U @ state。 - 由結果態的振幅計算測量機率。
Python 範例#
import numpy as np
I2 = np.eye(2, dtype=complex)
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)
def is_unitary(U, tol=1e-10):
d = U.shape[0]
return np.allclose(U.conj().T @ U, np.eye(d), atol=tol)
for name, U in [("X", X), ("Z", Z), ("H", H), ("S", S)]:
print(name, "是么正矩陣嗎?", is_unitary(U))
ket0 = np.array([1, 0], dtype=complex)
plus = H @ ket0
print("H|0> =", plus) # |+> 疊加態
print("再作用一次 H:", H @ plus) # 回到 |0>,H 是自己的反矩陣
# HXH = Z:共軛關係
print("HXH =\n", H @ X @ H) # 等於 Z
複雜度分析#
單量子位元閘作用於 \(n\) 位元狀態向量:實作上只需更新被該閘觸及的兩個振幅群,成本 \(O(2^n)\) (逐振幅寫入),記憶體也是 \(O(2^n)\) 。一般 \(d\times d\) 矩陣乘向量是 \(O(d^2)\) ,但稀疏的量子閘可降到 \(O(d)\) 。
練習#
- 驗證 \(Y = \begin{pmatrix}0&-i\\ i&0\end{pmatrix}\) 是么正矩陣,並計算 \(Y|0\rangle\) 。
- 證明任意 \(2\times 2\) 么正矩陣可寫成 \(e^{i\varphi} R_z(\alpha) R_y(\beta) R_z(\gamma)\) 的形式(提示:查閱 Z-Y 分解)。
- (程式)寫函式
apply_1q(U, state, qubit),把單量子位元閘 \(U\) 作用在 \(n\) 位元狀態向量的第qubit個位元上,且複雜度為 \(O(2^n)\) 而非 \(O(4^n)\) 。