跳轉到

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)。

練習#

  1. 計算 \((\frac{|0\rangle+|1\rangle}{\sqrt2}) \otimes \frac{|0\rangle-|1\rangle}{\sqrt2}\) 的四位振幅,並驗證正規化。
  2. 用秩判別法檢查 \(\frac{|00\rangle + |01\rangle + |10\rangle + |11\rangle}{2}\) 是否糾纏。
  3. (觀念)為什麼「糾纏 + 測量相關性」不能用來超光速傳訊?(提示:單邊的測量結果是均勻隨機的,見第 4 章。)