2.1 複數向量與內積#
概念說明#
量子態寫成複數向量。單一量子位元的狀態是二維複數向量
\[ |\psi\rangle = \alpha|0\rangle + \beta|1\rangle = \begin{pmatrix}\alpha \\ \beta\end{pmatrix}, \quad |\alpha|^2 + |\beta|^2 = 1 \]
其中 \(\alpha, \beta \in \mathbb{C}\) 稱為振幅,條件 \(|\alpha|^2+|\beta|^2=1\) 稱為正規化。複數 \(\alpha = a + bi\) 的絕對值 \(|\alpha| = \sqrt{a^2+b^2}\) ,共軛為 \(\alpha^* = a - bi\) 。
兩向量的內積定義為
\[ \langle \phi | \psi \rangle = \sum_i \phi_i^* \psi_i \]
注意第一個向量要取共軛。內積的兩個關鍵性質:
- 範數: \(\langle\psi|\psi\rangle = \|\psi\|^2\) ,正規化即要求它等於 1。
- 正交: \(\langle\phi|\psi\rangle = 0\) 。例如 \(\langle 0|1\rangle = 0\) ,這對應「測得 0 與測得 1 互斥」。
測量機率由 Born 規則給出:量測 \(|\psi\rangle\) 得到基底態 \(|i\rangle\) 的機率是 \(|\langle i|\psi\rangle|^2 = |\psi_i|^2\) 。這就是「振幅的平方是機率」的精確意義。
演算法步驟(以 numpy 驗證量子態性質)#
- 用複數 numpy 陣列表示量子態。
- 檢查正規化:
np.vdot(psi, psi).real == 1。 - 計算內積、判斷正交。
- 由振幅計算測量機率並抽樣驗證。
Python 範例#
import numpy as np
ket0 = np.array([1, 0], dtype=complex)
ket1 = np.array([0, 1], dtype=complex)
# 一個疊加態:|+> = (|0> + |1>)/sqrt(2)
plus = (ket0 + ket1) / np.sqrt(2)
print("正規化檢查:", np.vdot(plus, plus).real) # 1.0
print("<0|+> =", np.vdot(ket0, plus)) # 0.7071...j 0
print("<0|+>|^2 =", abs(np.vdot(ket0, plus))**2) # 測得 0 的機率 0.5
# 正交性
print("<0|1> =", np.vdot(ket0, ket1)) # 0
# 用振幅直接算機率分佈
probs = np.abs(plus)**2
rng = np.random.default_rng(42)
samples = rng.choice([0, 1], size=10000, p=probs)
print("10000 次量測中 0 出現", np.sum(samples == 0), "次") # 約 5000
複雜度分析#
對 \(d\) 維向量:內積、加法、純量乘法都是 \(O(d)\) ;對 \(n\) 個量子位元 \(d = 2^n\) ,因此任何「逐振幅」的操作在古典模擬器上都是指數成本。這是狀態向量模擬器的基本限制,也是本書所有模擬程式的時間下界。
練習#
- 驗證 \(|\psi\rangle = \frac{1}{\sqrt{3}}|0\rangle + \frac{1+i}{\sqrt{6}}|1\rangle\) 是否正規化,並計算測得 \(|0\rangle\) 、 \(|1\rangle\) 的機率。
- 寫一個函式
is_valid_state(v)判斷一個複數向量是否為合法量子態(正規化且維度為 2 的次方)。 - (觀念)兩個正交的量子態 \(|\phi\rangle, |\psi\rangle\) 為何可以被「完美區分」?用測量機率說明。