2.3 張量積與多量子位元#
概念說明#
兩個量子系統的合成狀態用張量積(Kronecker 積)描述。若 \(|\psi\rangle\) 是 \(m\) 維、 \(|\phi\rangle\) 是 \(n\) 維,則複合系統是 \(mn\) 維向量:
\[ |\psi\rangle \otimes |\phi\rangle = \begin{pmatrix}\psi_0\phi_0 \\ \psi_0\phi_1 \\ \vdots \\ \psi_1\phi_0 \\ \vdots\end{pmatrix} \]
對 \(n\) 個量子位元,狀態空間維度是 \(2^n\) ——這就是「指數大的狀態空間」的來源。矩陣同理:兩個閘同時作用在不同位元上,合成矩陣是 \(A \otimes B\) 。
乘積態與糾纏態:若複合態可寫成 \(|\psi\rangle \otimes |\phi\rangle\) ,稱為乘積態(可分離);否則稱為糾纏態。經典例子是 Bell 態
\[ |\Phi^+\rangle = \frac{|00\rangle + |11\rangle}{\sqrt{2}} \]
它無法分解成兩個單位向量之積(可反證:若 \((a,b)\otimes(c,d)\) 的第 00 與 11 分量非零,則 01 與 10 分量也必非零,與 Bell 態的 0 矛盾)。糾纏態的測量結果有相關性:量第一個位元得 0,第二個必為 0。
判斷可分離性的實用方法:把 \(2^n\) 維狀態重排成矩陣(reshape),若矩陣的秩為 1 則可分離,否則糾纏。
Python 範例#
import numpy as np
ket0 = np.array([1, 0], dtype=complex)
ket1 = np.array([0, 1], dtype=complex)
H = np.array([[1, 1], [1, -1]], dtype=complex) / np.sqrt(2)
def kron(*vecs):
out = np.array([1], dtype=complex)
for v in vecs:
out = np.kron(out, v)
return out
# 兩位元基底的張量積
print("|01> =", kron(ket0, ket1))
# 乘積態:H|0> ⊗ |0>
prod = kron(H @ ket0, ket0)
print("乘積態 =", prod)
# Bell 態(糾纏)
bell = (kron(ket0, ket0) + kron(ket1, ket1)) / np.sqrt(2)
print("Bell 態 =", bell)
# 用秩判斷糾纏
def is_entangled(psi, n):
M = psi.reshape(2**n, -1) # 只對 2n 位元;對 1+1 位元 reshape(2,2)
return np.linalg.matrix_rank(M) > 1
print("乘積態糾纏嗎?", np.linalg.matrix_rank(prod.reshape(2, 2)) > 1) # False
print("Bell 態糾纏嗎?", np.linalg.matrix_rank(bell.reshape(2, 2)) > 1) # True
# Bell 態的測量相關性
probs = np.abs(bell)**2
print("量測分佈 (00,01,10,11):", probs) # 0.5, 0, 0, 0.5
複雜度分析#
張量積的維度是 \(mn\) , \(n\) 位元狀態向量需要 \(2^{n+1}\) 個複數(雙精度共 16 bytes/個)。 \(n=30\) 約 17 GB、 \(n=40\) 約 17 TB——古典模擬器通常止步於 30~40 位元。張量積運算本身成本 \(O(mn)\) ;秩判別是 \(O(\min(m,n)^3)\) (SVD)。
練習#
- 計算 \((\frac{|0\rangle+|1\rangle}{\sqrt2}) \otimes \frac{|0\rangle-|1\rangle}{\sqrt2}\) 的四位振幅,並驗證正規化。
- 用秩判別法檢查 \(\frac{|00\rangle + |01\rangle + |10\rangle + |11\rangle}{2}\) 是否糾纏。
- (觀念)為什麼「糾纏 + 測量相關性」不能用來超光速傳訊?(提示:單邊的測量結果是均勻隨機的,見第 4 章。)