量子疊加態 vs 老莊的「道」——在存在與不存在之間
系列:量子力學遇見東方哲學 #03/12 | 閱讀時間:30分鐘 | Python (NumPy, Matplotlib)
作者:Wina @ Code & Cogito
薛丁格的懺悔
1935年,柏林。
埃爾溫·薛丁格(Erwin Schrödinger)坐在書桌前,盯著自己剛寫完的論文。標題是:《量子力學的現狀》(Die gegenwärtige Situation in der Quantenmechanik)。
他寫了一個思想實驗,用來諷刺哥本哈根詮釋的荒謬。
想像一隻貓被關在密封的盒子裡。盒子裡有一個放射性原子、一個蓋革計數器、一個錘子、一瓶毒藥。
如果原子衰變,計數器觸發,錘子砸碎毒藥瓶,貓死。
如果原子不衰變,什麼都不發生,貓活。量子力學說:在我們測量之前,原子處於「衰變」和「未衰變」的疊加態。
那麼…貓呢?
按照哥本哈根詮釋,貓也應該處於「死」和「活」的疊加態——既死又活,直到有人打開盒子。
薛丁格把筆放下,嘆了口氣。
他希望這個荒謬的例子能讓人們意識到:哥本哈根詮釋一定哪裡錯了。量子規律適用於原子,但不可能適用於貓。
幾年後,在給愛因斯坦的信中,他寫道:
「這該死的量子跳躍…我很抱歉我曾經與它有任何關係。」
但歷史開了一個殘酷的玩笑。
薛丁格的貓不但沒有推翻哥本哈根詮釋,反而成為量子力學最著名的象徵。
而且,90年後的今天,物理學家不得不承認:
貓確實可以既死又活。只是需要非常非常非常小的貓。
疊加態:量子世界的「又是又不是」
數學表達:最簡單卻最詭異
量子疊加態的數學極其簡單:
|ψ⟩ = α|0⟩ + β|1⟩
其中:
– |0⟩ 和 |1⟩ 是兩個基本狀態(比如「死」和「活」)
– α 和 β 是複數,稱為「機率幅」
– |α|² 是測量後得到 |0⟩ 的機率
– |β|² 是測量後得到 |1⟩ 的機率
– |α|² + |β|² = 1(機率守恆)
看起來很簡單對吧?像是「50%機率死,50%機率活」?
不對!
疊加態不是「不知道」,是「真的兩者都是」
經典思維會這樣想:
貓要麼死,要麼活。我們不知道是哪個,所以說「50%死,50%活」。就像擲骰子,骰子落地前就已經是某一面了,只是我們不知道。
這叫「無知詮釋」(ignorance interpretation)——機率只是我們知識的不完備。
但量子力學說:錯!
量子疊加態是:
– 不是「貓要麼死要麼活但我們不知道」
– 而是「貓真的同時既死又活」
– 不是「原子要麼衰變要麼沒衰變」
– 而是「原子真的處於衰變和未衰變的混合」
測量之前,貓沒有確定的生死狀態。
怎麼知道這不是「無知」而是「真實疊加」?
答案:干涉實驗。
如果疊加態只是「無知」,那麼兩個可能性應該簡單相加:
P(總) = P(可能性1) + P(可能性2)
但量子力學中,機率幅會先相加,再取模方平方:
P(總) = |α₁ + α₂|²
展開後:
P(總) = |α₁|² + |α₂|² + 2Re(α₁*α₂*)
最後那一項 2Re(α₁α₂) 叫做「干涉項」。
- 如果是「無知」,不會有這一項
- 如果是「真實疊加」,必然有這一項
雙縫實驗的干涉條紋,就是這個干涉項的證據。
結論:疊加態不是認知上的不確定,是本體論上的不確定——粒子真的同時在兩個地方。
老子的「道」:在命名之前
公元前4世紀,中國。
一位名叫李耳的老者,騎著青牛,走向函谷關。守關的尹喜請他留下智慧,於是有了《道德經》。
開篇第一章:
道可道,非常道;
名可名,非常名。
無名天地之始,
有名萬物之母。
這是什麼意思?
「道可道,非常道」——可以被描述的道,就不是永恆的道
老子說:真正的「道」無法用語言描述。
為什麼?
因為語言一出現,分別就產生了。
- 說「這是桌子」,「桌子」和「非桌子」的分別就出現了
- 說「這是美」,「美」和「醜」的對立就產生了
- 說「這是存在」,「存在」和「不存在」的二元就建立了
老子認為:在語言、概念、命名之前,世界處於一種無分別的原初狀態。這種狀態叫做「道」。
一旦你給它命名(「道可道」),它就不再是那個永恆的、無分別的「道」(「非常道」)了。
「無名天地之始,有名萬物之母」
「無名」(無法命名的狀態)是宇宙的起源。
「有名」(命名之後)是萬物的母親。
換句話說:
1. 宇宙最初是「無名」的——沒有分別、沒有對立、沒有確定性
2. 一旦命名,萬物就從「無名」中誕生出來
這聽起來很玄?
但它與量子力學驚人地相似:
– 測量前(無名):粒子處於疊加態,沒有確定狀態
– 測量後(有名):粒子坍縮到確定狀態,「位置」這個概念誕生了
「有無相生」——有和無互相產生
《道德經》第二章:
有無相生,
難易相成,
長短相形,
高下相傾。
意思是:
– 「有」和「無」互相依存
– 「難」和「易」互相成就
– 「長」和「短」互相對照
– 「高」和「下」互相傾斜
沒有「有」,就沒有「無」;沒有「無」,也沒有「有」。
這與量子疊加態的結構一模一樣:
|ψ⟩ = α|有⟩ + β|無⟩
「有」和「無」不是對立的選項,而是同一個疊加態的兩個組成部分。
驚人的對應:疊加態 vs 「道」
讓我們並排比較:
| 量子疊加態 | 老子的「道」 |
|---|---|
| 測量前無確定態 | 命名前無分別相 |
| 粒子不是「在A或在B但我們不知道」 | 道不是「有或無但我們不知道」 |
| 而是「真的同時在A和B」 | 而是「真的超越有無二元」 |
| 測量創造確定性 | 命名創造萬物 |
| 測量前:|ψ⟩ = α|0⟩ + β|1⟩ | 命名前:無名天地之始 |
| 測量後:|0⟩ 或 |1⟩ 確定 | 命名後:有名萬物之母 |
| 疊加是本體 | 道是本源 |
| 疊加態不是「過渡狀態」 | 道不是「空無」 |
| 而是最基本的存在方式 | 而是最根本的實在 |
| 對立統一 | 有無相生 |
| |ψ⟩ 中「有」和「無」共存 | 「有無相生」,不可分割 |
結構性對應,不是表面類比
重要的是:這不是說「量子力學證明了老子對」或「老子預見了量子力學」。
而是說:兩者都指向了超越二元對立的實在結構。
- 量子力學從實驗室發現:測量之前,世界不是確定的
- 老子從沉思中體悟:命名之前,道不是分別的
兩者都在說:確定性/分別相不是世界的本質,而是觀察/命名的產物。
莊子的蝴蝶夢:誰是觀察者?
公元前369年,莊子(莊周)做了一個夢。
醒來後,他寫下了哲學史上最詭異的問題:
昔者莊周夢為蝴蝶,栩栩然蝴蝶也。
自喻適志與!不知周也。
俄然覺,則蘧蘧然周也。
不知周之夢為蝴蝶與?蝴蝶之夢為周與?
周與蝴蝶,則必有分矣。此之謂物化。
白話翻譯:
從前,莊周夢見自己變成蝴蝶,翩翩飛舞,感覺自己就是蝴蝶。完全忘記了自己是莊周。
突然醒來,發現自己確實是莊周。
但是:不知道是莊周夢見自己變成蝴蝶?還是蝴蝶夢見自己變成莊周?
莊周和蝴蝶,一定有分別。這就是「物化」(萬物的變化)。
量子詮釋:疊加態的觀察者
用量子語言重新表達:
在「測量」(醒來)之前,系統處於疊加態:
|ψ⟩ = α|莊周⟩ + β|蝴蝶⟩
問題是:誰來測量?
- 如果「莊周」測量,系統坍縮到「莊周是真的,蝴蝶是夢」
- 如果「蝴蝶」測量,系統坍縮到「蝴蝶是真的,莊周是夢」
但在坍縮之前,沒有客觀的「真」和「假」。
莊周和蝴蝶都同樣真實,或者說,都同樣是夢。
「物化」——萬物的變化是疊加態的坍縮
莊子說:「周與蝴蝶,則必有分矣。此之謂物化。」
「物化」的意思是:萬物的變化、轉換、流動。
用量子語言:物化就是量子態在不同基底之間的變換。
- 在「莊周-蝴蝶」基底下:|ψ⟩ = α|莊周⟩ + β|蝴蝶⟩
- 在「真-假」基底下:|ψ⟩ = γ|真⟩ + δ|假⟩
兩種描述同樣有效,只是選擇了不同的觀察角度(測量基底)。
沒有「絕對真實」的狀態,只有相對於特定測量的確定態。
Python模型:看見「既是又不是」
模型1:薛丁格的貓完整模擬器
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
# 設定中文字體
plt.rcParams['font.sans-serif'] = ['Microsoft JhengHei', 'Arial']
plt.rcParams['axes.unicode_minus'] = False
class SchrodingerCat:
"""
薛丁格的貓完整模擬
包含:原子狀態、貓狀態、時間演化、測量
"""
def __init__(self, half_life=1.0):
self.half_life = half_life
self.lambda_decay = np.log(2) / half_life # 衰變常數
def atom_state(self, t):
"""原子在時間t的量子態:|ψ⟩ = α|未衰變⟩ + β|已衰變⟩"""
alpha = np.sqrt(np.exp(-self.lambda_decay * t))
beta = np.sqrt(1 - np.exp(-self.lambda_decay * t))
return alpha, beta
def cat_state(self, t):
"""貓的狀態隨時間演化:|貓⟩ = α|活⟩ + β|死⟩"""
alpha, beta = self.atom_state(t)
prob_alive = np.abs(alpha)**2
prob_dead = np.abs(beta)**2
return prob_alive, prob_dead
def measure(self, t):
"""打開盒子,測量貓的狀態——波函數坍縮"""
prob_alive, prob_dead = self.cat_state(t)
outcome = np.random.choice(['alive', 'dead'],
p=[prob_alive, prob_dead])
return outcome
這個類別的核心是 atom_state 方法:它用指數衰減公式計算原子在任意時刻的量子態機率幅。因為貓的命運與原子完全糾纏,cat_state 直接繼承了原子的機率分佈。而 measure 方法模擬的正是打開盒子那一刻——波函數坍縮,貓的命運從「既死又活」變成確定的結果。
接下來,我們為這隻量子貓加上視覺化能力,用 Bloch 球呈現量子態從「活」到「死」的連續軌跡。
def visualize_evolution(self, max_time=3.0):
"""視覺化貓的量子態隨時間演化"""
times = np.linspace(0, max_time, 100)
probs_alive = []
probs_dead = []
for t in times:
p_alive, p_dead = self.cat_state(t)
probs_alive.append(p_alive)
probs_dead.append(p_dead)
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(12, 10))
# === 上圖:機率演化 ===
ax1.fill_between(times, 0, probs_alive, alpha=0.6, color='green', label='P(貓活)')
ax1.fill_between(times, 0, probs_dead, alpha=0.6, color='red', label='P(貓死)')
ax1.plot(times, probs_alive, 'g-', linewidth=2)
ax1.plot(times, probs_dead, 'r-', linewidth=2)
ax1.set_xlabel('時間(小時)', fontsize=13)
ax1.set_ylabel('機率', fontsize=13)
ax1.set_title('薛丁格的貓:疊加態隨時間演化\n(打開盒子前)',
fontsize=15, fontweight='bold')
ax1.legend(fontsize=12, loc='center right')
ax1.grid(True, alpha=0.3)
ax1.set_ylim(0, 1.1)
# 標註半衰期
ax1.axvline(self.half_life, color='black', linestyle='--', linewidth=2,
label=f'半衰期 = {self.half_life}小時')
ax1.text(self.half_life + 0.1, 0.9,
f'半衰期\n此時P(活)=P(死)=50%',
fontsize=10, bbox=dict(boxstyle='round', facecolor='yellow', alpha=0.7))
ax1.text(max_time * 0.5, 0.3,
'重要:這不是「貓要麼死要麼活」!\n'
'而是「貓同時既死又活」!\n'
'量子態 |貓⟩ = α|活⟩ + β|死⟩',
fontsize=11, ha='center',
bbox=dict(boxstyle='round', facecolor='lightblue', alpha=0.8))
上半部分繪製機率隨時間的演化圖。綠色區域代表「貓活」的機率,紅色代表「貓死」——兩者此消彼長,在半衰期交叉點達到完美的 50/50。這張圖的重點不在於機率本身,而在於提醒我們:在盒子打開之前,貓不是「不知道死活」,而是「真的同時處於兩種狀態」。
下半部分用 Bloch 球將這個抽象概念具象化,量子態從北極(活)向南極(死)移動的軌跡一目了然。
# === 下圖:Bloch球表示 ===
ax2 = fig.add_subplot(212, projection='3d')
u = np.linspace(0, 2 * np.pi, 50)
v = np.linspace(0, np.pi, 50)
x_sphere = np.outer(np.cos(u), np.sin(v))
y_sphere = np.outer(np.sin(u), np.sin(v))
z_sphere = np.outer(np.ones(np.size(u)), np.cos(v))
ax2.plot_surface(x_sphere, y_sphere, z_sphere, alpha=0.1, color='gray')
for i, t in enumerate(times[::5]):
alpha, beta = self.atom_state(t)
theta = 2 * np.arctan2(np.abs(beta), np.abs(alpha))
phi = 0
x = np.sin(theta) * np.cos(phi)
y = np.sin(theta) * np.sin(phi)
z = np.cos(theta)
color = plt.cm.RdYlGn(1 - t/max_time)
ax2.scatter([x], [y], [z], c=[color], s=50, alpha=0.8)
ax2.scatter([0], [0], [1], c='green', s=300, marker='o',
edgecolors='black', linewidth=2, label='t=0: |活⟩')
ax2.scatter([0], [0], [-1], c='red', s=300, marker='o',
edgecolors='black', linewidth=2, label=f't={max_time}: 接近|死⟩')
ax2.set_xlabel('X')
ax2.set_ylabel('Y')
ax2.set_zlabel('Z')
ax2.set_title('Bloch球:貓的量子態軌跡', fontsize=14, fontweight='bold')
ax2.legend(fontsize=10)
plt.tight_layout()
plt.savefig('schrodinger_cat_evolution.png', dpi=300, bbox_inches='tight')
plt.show()
最後,我們加上實驗模擬功能。每次呼叫 run_experiments 就像「打開盒子100次」,讓統計結果和理論預測對照——驗證量子力學的機率詮釋。
def run_experiments(self, t, n_trials=100):
"""運行多次實驗,統計結果"""
print("\n" + "="*70)
print(f"【薛丁格的貓實驗】時間 t = {t} 小時")
print("="*70)
prob_alive, prob_dead = self.cat_state(t)
print(f"\n理論預測:")
print(f" P(貓活) = {prob_alive:.2%}")
print(f" P(貓死) = {prob_dead:.2%}")
results = [self.measure(t) for _ in range(n_trials)]
count_alive = results.count('alive')
count_dead = results.count('dead')
print(f"\n實驗結果({n_trials}次測量):")
print(f" 觀察到貓活:{count_alive}次 ({count_alive/n_trials:.2%})")
print(f" 觀察到貓死:{count_dead}次 ({count_dead/n_trials:.2%})")
print(f"\n關鍵洞見:")
print(f" • 每次打開盒子之前,貓都處於疊加態")
print(f" • 打開盒子(測量)導致波函數坍縮")
print(f" • 不同次實驗給出不同結果,但統計上符合理論")
print("="*70)
# 創建貓
cat = SchrodingerCat(half_life=1.0)
# 視覺化演化
cat.visualize_evolution(max_time=3.0)
# 運行實驗
cat.run_experiments(t=0.5, n_trials=100)
cat.run_experiments(t=1.0, n_trials=100)
cat.run_experiments(t=2.0, n_trials=100)
執行結果:
– 上圖:機率隨時間變化(綠線下降,紅線上升)
– 下圖:Bloch球上的量子態軌跡(從北極到南極)
– 統計輸出:100次實驗的結果分佈
關鍵洞見:
在t=1小時(半衰期)時,貓50%活、50%死。
但這不是「不知道」,而是真的處於既死又活的疊加態。
模型2:老子「有無相生」的動態視覺化
def dao_you_wu_animation():
"""
「有無相生」的動態視覺化
展示:有和無如何互相產生、互相依存
"""
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(16, 7))
theta = np.linspace(0, 2*np.pi, 1000)
n_frames = 60
def update(frame):
ax1.clear()
ax2.clear()
rotation = 2 * np.pi * frame / n_frames
# 太極圖(旋轉)
r_yin = 1 + 0.5 * np.sin(theta + rotation)
r_yang = 1 - 0.5 * np.sin(theta + rotation)
ax1.fill(r_yin * np.cos(theta), r_yin * np.sin(theta),
color='black', alpha=0.8, label='無')
ax1.fill(r_yang * np.cos(theta + np.pi), r_yang * np.sin(theta + np.pi),
color='white', edgecolor='black', linewidth=2, label='有')
# 魚眼
eye_x_yang = 0.5 * np.cos(rotation)
eye_y_yang = 0.5 * np.sin(rotation)
eye_x_yin = -0.5 * np.cos(rotation)
eye_y_yin = -0.5 * np.sin(rotation)
ax1.add_patch(plt.Circle((eye_x_yang, eye_y_yang), 0.15,
color='white', ec='black', linewidth=1.5))
ax1.add_patch(plt.Circle((eye_x_yin, eye_y_yin), 0.15,
color='black', ec='black', linewidth=1.5))
ax1.add_patch(plt.Circle((0, 0), 1.5, fill=False,
edgecolor='black', linewidth=3))
ax1.set_xlim(-2, 2)
ax1.set_ylim(-2, 2)
ax1.set_aspect('equal')
ax1.axis('off')
ax1.set_title('太極圖:有無相生\n「有」中生「無」,「無」中生「有」',
fontsize=14, fontweight='bold')
動畫的左半邊是旋轉的太極圖。陰(無)和陽(有)的邊界隨角度流動,魚眼也跟著旋轉——視覺化了老子「有無相生」的動態本質。「有」的極致處孕育著「無」,「無」的深處又萌生「有」。
右半邊則同步呈現 Bloch 球上的量子態旋轉,讓讀者直觀感受:量子疊加態中 |有⟩ 和 |無⟩ 的關係,與太極圖中陰陽的互動結構完全同構。
# === 右圖:量子疊加態(同步旋轉)===
u = np.linspace(0, 2 * np.pi, 30)
v = np.linspace(0, np.pi, 30)
x_sphere = np.outer(np.cos(u), np.sin(v))
y_sphere = np.outer(np.sin(u), np.sin(v))
z_sphere = np.outer(np.ones(np.size(u)), np.cos(v))
ax2.plot_surface(x_sphere, y_sphere, z_sphere, alpha=0.1, color='gray')
theta_q = np.pi/3
phi_q = rotation
x_state = np.sin(theta_q) * np.cos(phi_q)
y_state = np.sin(theta_q) * np.sin(phi_q)
z_state = np.cos(theta_q)
ax2.quiver(0, 0, 0, x_state, y_state, z_state,
arrow_length_ratio=0.3, color='red', linewidth=3)
ax2.scatter([0], [0], [1], c='blue', s=200, label='|0⟩ (有)')
ax2.scatter([0], [0], [-1], c='green', s=200, label='|1⟩ (無)')
ax2.plot([0, x_state], [0, y_state], [0, 0], 'r--', alpha=0.5, linewidth=1)
ax2.set_xlabel('X')
ax2.set_ylabel('Y')
ax2.set_zlabel('Z')
ax2.set_title('量子疊加態:|ψ⟩ = α|有⟩ + β|無⟩\n隨時間演化',
fontsize=14, fontweight='bold')
ax2.legend(fontsize=10)
ax2.set_xlim([-1.5, 1.5])
ax2.set_ylim([-1.5, 1.5])
ax2.set_zlim([-1.5, 1.5])
anim = FuncAnimation(fig, update, frames=n_frames,
interval=100, repeat=True)
plt.tight_layout()
plt.show()
動畫版展示了時間演化的動態過程。接下來的靜態版本則更適合文章配圖——左邊是太極圖,右邊是 Bloch 球上的四種典型量子態:純有、純無、以及兩種不同相位的等權疊加態。
注意 Bloch 球赤道上的紅點 (|0⟩+|1⟩)/√2:這個位置既不偏向北極(有),也不偏向南極(無),而是完美地處於兩者之間。這正是老子所說的「有無相生」的量子版本。
# 靜態版本(用於文章)
fig_static, (ax1, ax2) = plt.subplots(1, 2, figsize=(16, 7))
theta = np.linspace(0, 2*np.pi, 1000)
r_yin = 1 + 0.5 * np.sin(theta)
r_yang = 1 - 0.5 * np.sin(theta)
ax1.fill(r_yin * np.cos(theta), r_yin * np.sin(theta), color='black', alpha=0.8)
ax1.fill(r_yang * np.cos(theta + np.pi), r_yang * np.sin(theta + np.pi),
color='white', edgecolor='black', linewidth=2)
ax1.add_patch(plt.Circle((0, 0.5), 0.15, color='white', ec='black', lw=1.5))
ax1.add_patch(plt.Circle((0, -0.5), 0.15, color='black', ec='black', lw=1.5))
ax1.add_patch(plt.Circle((0, 0), 1.5, fill=False, ec='black', lw=3))
ax1.set_xlim(-2, 2)
ax1.set_ylim(-2, 2)
ax1.set_aspect('equal')
ax1.axis('off')
ax1.set_title('老子:有無相生\n「無」中有「有」,「有」中有「無」',
fontsize=14, fontweight='bold')
ax1.text(0, -2.5, '對立面不是矛盾,而是同一整體的兩個側面',
ha='center', fontsize=11,
bbox=dict(boxstyle='round', facecolor='lightyellow', alpha=0.7))
ax2 = fig_static.add_subplot(122, projection='3d')
u = np.linspace(0, 2 * np.pi, 30)
v = np.linspace(0, np.pi, 30)
x = np.outer(np.cos(u), np.sin(v))
y = np.outer(np.sin(u), np.sin(v))
z = np.outer(np.ones(np.size(u)), np.cos(v))
ax2.plot_surface(x, y, z, alpha=0.1, color='gray')
states = [
(0, 0, 1, 'blue', '|0⟩ (純有)'),
(0, 0, -1, 'green', '|1⟩ (純無)'),
(1, 0, 0, 'red', '(|0⟩+|1⟩)/√2'),
(0, 1, 0, 'purple', '(|0⟩+i|1⟩)/√2'),
]
for x, y, z, color, label in states:
ax2.scatter([x], [y], [z], c=color, s=200, label=label)
if x != 0 or y != 0 or z != 1:
ax2.quiver(0, 0, 0, x, y, z, arrow_length_ratio=0.2,
color=color, alpha=0.5, linewidth=2)
ax2.set_xlabel('X')
ax2.set_ylabel('Y')
ax2.set_zlabel('Z')
ax2.set_title('量子力學:疊加態\n|ψ⟩ = α|有⟩ + β|無⟩',
fontsize=14, fontweight='bold')
ax2.legend(fontsize=9, loc='upper left')
plt.tight_layout()
plt.savefig('dao_you_wu_superposition.png', dpi=300, bbox_inches='tight')
plt.show()
print("\n" + "="*70)
print("【有無相生 vs 量子疊加】")
print("="*70)
print("\n老子《道德經》:")
print(" 「有無相生,難易相成。」")
print(" → 有和無互相依存,不可分割")
print("\n量子力學:")
print(" |ψ⟩ = α|0⟩ + β|1⟩")
print(" → |0⟩ 和 |1⟩ 同時存在於疊加態中")
print("\n共同點:")
print(" • 對立面不是二選一,而是同時共存")
print(" • 整體大於部分之和")
print(" • 分別是觀察/命名的產物,不是本質")
print("="*70)
# 執行
dao_you_wu_animation()
執行結果:
– 左圖:太極圖(有無相生)
– 右圖:Bloch球上的疊加態
– 動畫版本:兩者同步旋轉
哲學洞見:
老子的「有無相生」與量子疊加態的數學結構驚人相似——兩者都是超越二元對立的整體。
模型3:莊周夢蝶的量子詮釋
def zhuangzi_butterfly_dream():
"""
莊周夢蝶的量子力學詮釋
展示:觀察者與被觀察物的糾纏
"""
fig = plt.figure(figsize=(16, 10))
# === 左上:疊加態機率柱狀圖 ===
ax1 = fig.add_subplot(221)
scenarios = {
'夢前\n(疊加態)': [0.5, 0.5],
'夢中\n(仍是疊加)': [0.5, 0.5],
'醒後測量1\n(坍縮到莊周)': [1.0, 0.0],
'醒後測量2\n(坍縮到蝴蝶)': [0.0, 1.0],
}
x = np.arange(len(scenarios))
width = 0.35
values_state1 = [v[0] for v in scenarios.values()]
values_state2 = [v[1] for v in scenarios.values()]
ax1.bar(x - width/2, values_state1, width, label='|莊周⟩', color='blue', alpha=0.7)
ax1.bar(x + width/2, values_state2, width, label='|蝴蝶⟩', color='orange', alpha=0.7)
ax1.set_ylabel('機率', fontsize=13)
ax1.set_title('莊周夢蝶:量子疊加態詮釋', fontsize=14, fontweight='bold')
ax1.set_xticks(x)
ax1.set_xticklabels(scenarios.keys(), fontsize=10)
ax1.legend(fontsize=12)
ax1.set_ylim(0, 1.2)
ax1.grid(True, alpha=0.3, axis='y')
ax1.text(1.5, 0.8, '關鍵:測量前,\n莊周和蝴蝶\n「同樣真實」!',
fontsize=11, ha='center',
bbox=dict(boxstyle='round', facecolor='yellow', alpha=0.7))
左上角的柱狀圖清楚地呈現了莊周夢蝶的量子結構:在「夢前」和「夢中」階段,|莊周⟩ 和 |蝴蝶⟩ 的機率各佔50%——這不是「不知道是誰」,而是兩者同時存在。只有在「醒後測量」的那一刻,波函數才坍縮到其中一種確定狀態。
下方兩個面板分別呈現「莊周測量」和「蝴蝶測量」兩種坍縮結果,讓讀者直觀理解:測量結果取決於誰來測量。
# === 左下:莊周的視角 ===
ax2 = fig.add_subplot(223)
ax2.text(0.5, 0.7, '如果莊周測量...', ha='center', fontsize=14,
fontweight='bold', transform=ax2.transAxes)
ax2.text(0.5, 0.5,
'波函數坍縮:\n|ψ⟩ → |莊周⟩\n\n'
'結論:\n「我是莊周,\n剛才夢見蝴蝶。」',
ha='center', va='center', fontsize=12,
transform=ax2.transAxes,
bbox=dict(boxstyle='round', facecolor='lightblue', alpha=0.7))
ax2.axis('off')
# === 右下:蝴蝶的視角 ===
ax3 = fig.add_subplot(224)
ax3.text(0.5, 0.7, '如果蝴蝶測量...', ha='center', fontsize=14,
fontweight='bold', transform=ax3.transAxes)
ax3.text(0.5, 0.5,
'波函數坍縮:\n|ψ⟩ → |蝴蝶⟩\n\n'
'結論:\n「我是蝴蝶,\n剛才夢見莊周。」',
ha='center', va='center', fontsize=12,
transform=ax3.transAxes,
bbox=dict(boxstyle='round', facecolor='lightyellow', alpha=0.7))
ax3.axis('off')
右上角的 Bloch 球將整個思想實驗濃縮為一個幾何圖像:北極是 |莊周⟩,南極是 |蝴蝶⟩,而赤道上的紫色點就是那個「既是莊周又是蝴蝶」的疊加態。箭頭指向赤道,意味著系統在測量前不偏向任何一方。
# === 右上:3D量子態空間 ===
ax4 = fig.add_subplot(222, projection='3d')
u = np.linspace(0, 2 * np.pi, 30)
v = np.linspace(0, np.pi, 30)
x = np.outer(np.cos(u), np.sin(v))
y = np.outer(np.sin(u), np.sin(v))
z = np.outer(np.ones(np.size(u)), np.cos(v))
ax4.plot_surface(x, y, z, alpha=0.1, color='gray')
ax4.scatter([0], [0], [1], c='blue', s=300, label='|莊周⟩',
edgecolors='black', linewidth=2)
ax4.scatter([0], [0], [-1], c='orange', s=300, label='|蝴蝶⟩',
edgecolors='black', linewidth=2)
ax4.scatter([1], [0], [0], c='purple', s=300,
label='疊加態\n(|莊周⟩+|蝴蝶⟩)/√2',
edgecolors='black', linewidth=2)
ax4.quiver(0, 0, 0, 1, 0, 0, arrow_length_ratio=0.3,
color='purple', linewidth=3, alpha=0.7)
ax4.set_xlabel('X')
ax4.set_ylabel('Y')
ax4.set_zlabel('Z')
ax4.set_title('量子態空間\n測量前:疊加態', fontsize=13, fontweight='bold')
ax4.legend(fontsize=9, loc='upper left')
plt.tight_layout()
plt.savefig('zhuangzi_butterfly_quantum.png', dpi=300, bbox_inches='tight')
plt.show()
# 文字說明
print("\n" + "="*70)
print("【莊周夢蝶的量子詮釋】")
print("="*70)
print("\n經典問題(莊子):")
print(" 「不知周之夢為蝴蝶與?蝴蝶之夢為周與?」")
print("\n量子答案:")
print(" 測量前,系統處於疊加態:")
print(" |ψ⟩ = (|莊周⟩ + |蝴蝶⟩) / √2")
print(" 沒有「絕對真實」的答案!")
print("\n深層意義:")
print(" • 沒有獨立於觀察者的「客觀實在」")
print(" • 「真」和「假」是相對的,不是絕對的")
print(" • 觀察者與被觀察物不可分離")
print("="*70)
# 執行
zhuangzi_butterfly_dream()
執行結果:
– 四個子圖展示莊周夢蝶的量子詮釋
– 視覺化:測量前(疊加)到測量後(坍縮)
– 兩種可能的測量結果
哲學震撼:
莊子在2300年前就意識到:「真」和「假」不是絕對的,而是依賴於觀察者的視角。
這與量子力學的「測量依賴性」完全一致!
模型4:退相干——為什麼貓不能既死又活?
def decoherence_simulation():
"""
退相干模擬
解釋:為什麼宏觀物體(如貓)不顯示量子疊加態
"""
fig, axes = plt.subplots(2, 2, figsize=(16, 12))
times = np.linspace(0, 10, 1000)
# === (0,0) 微觀粒子:長相干時間 ===
ax = axes[0, 0]
tau_coherence_micro = 10.0
coherence_micro = np.exp(-times / tau_coherence_micro)
ax.plot(times, coherence_micro, 'b-', linewidth=3, label='相干性')
ax.fill_between(times, 0, coherence_micro, alpha=0.3, color='blue')
ax.axhline(0.5, color='red', linestyle='--', label='50%相干')
ax.set_xlabel('時間(任意單位)', fontsize=12)
ax.set_ylabel('相干性', fontsize=12)
ax.set_title('微觀粒子(如電子)\n相干時間長 → 可以保持疊加態',
fontsize=13, fontweight='bold', color='blue')
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3)
ax.set_ylim(0, 1.1)
ax.text(5, 0.8, f'相干時間 τ = {tau_coherence_micro}\n可觀察到量子效應',
fontsize=10, bbox=dict(boxstyle='round', facecolor='lightblue', alpha=0.7))
# === (0,1) 宏觀物體:極短相干時間 ===
ax = axes[0, 1]
tau_coherence_macro = 0.001
coherence_macro = np.exp(-times / tau_coherence_macro)
ax.plot(times, coherence_macro, 'r-', linewidth=3, label='相干性')
ax.fill_between(times, 0, coherence_macro, alpha=0.3, color='red')
ax.set_xlabel('時間(任意單位)', fontsize=12)
ax.set_ylabel('相干性', fontsize=12)
ax.set_title('宏觀物體(如貓)\n相干時間極短 → 瞬間坍縮',
fontsize=13, fontweight='bold', color='red')
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3)
ax.set_ylim(0, 1.1)
ax.text(5, 0.8, f'相干時間 τ ≈ {tau_coherence_macro}\n幾乎瞬間退相干',
fontsize=10, bbox=dict(boxstyle='round', facecolor='lightcoral', alpha=0.7))
上面兩張圖形成鮮明對比:微觀粒子(左)的相干性緩慢衰減,藍色區域幾乎填滿整個時間軸,意味著電子可以長時間維持疊加態。而宏觀物體(右)的紅色區域瞬間歸零——貓的疊加態在 10⁻⁴⁰ 秒內就消失了,比任何實驗設備的時間解析度都短得多。
這就是退相干的核心機制:不是量子力學「不適用」於貓,而是貓與環境的相互作用太頻繁,每一次碰撞都相當於一次微型「測量」。
# === (1,0) 環境粒子數 vs 退相干速率 ===
ax = axes[1, 0]
n_particles = np.logspace(0, 10, 100)
decoherence_rate = n_particles / 1e9
ax.loglog(n_particles, decoherence_rate, 'g-', linewidth=3)
ax.fill_between(n_particles, 1e-10, decoherence_rate, alpha=0.3, color='green')
ax.scatter([1], [1e-9], s=200, c='blue', label='單個原子', zorder=5)
ax.scatter([1e6], [1e-3], s=200, c='purple', label='病毒', zorder=5)
ax.scatter([1e18], [1e9], s=200, c='red', label='貓', zorder=5)
ax.set_xlabel('環境粒子數(對數尺度)', fontsize=12)
ax.set_ylabel('退相干速率(對數尺度)', fontsize=12)
ax.set_title('退相干速率 ∝ 環境粒子數\n物體越大,退相干越快',
fontsize=13, fontweight='bold')
ax.legend(fontsize=11)
ax.grid(True, alpha=0.3, which='both')
左下角的對數圖揭示了一個殘酷的現實:退相干速率與環境粒子數成正比。從單個原子(藍點)到病毒(紫點)再到貓(紅點),退相干速率跨越了27個數量級。這條綠色直線告訴我們,量子世界與經典世界之間並沒有明確的邊界——只有一個漸進的過渡。
# === (1,1) 疊加態保持時間 ===
ax = axes[1, 1]
objects = ['電子', '分子', '病毒', '灰塵', '細菌', '貓']
coherence_times = [1e10, 1e5, 1e-3, 1e-10, 1e-15, 1e-40]
colors = ['blue', 'cyan', 'green', 'yellow', 'orange', 'red']
y_pos = np.arange(len(objects))
ax.barh(y_pos, np.log10(coherence_times), color=colors, alpha=0.7)
ax.set_yticks(y_pos)
ax.set_yticklabels(objects, fontsize=12)
ax.set_xlabel('相干時間(log₁₀秒)', fontsize=12)
ax.set_title('不同尺度物體的相干時間\n為什麼我們看不到「既死又活」的貓?',
fontsize=13, fontweight='bold')
ax.grid(True, alpha=0.3, axis='x')
ax.text(-20, 5.5,
f'貓的相干時間 ≈ 10⁻⁴⁰秒\n(比宇宙年齡短10³⁰倍!)\n→ 根本無法觀察到疊加態',
fontsize=10, bbox=dict(boxstyle='round', facecolor='lightcoral', alpha=0.7))
ax.text(8, 0.5,
f'電子的相干時間 ≈ 10¹⁰秒\n(約300年)\n→ 容易觀察到量子效應',
fontsize=10, bbox=dict(boxstyle='round', facecolor='lightblue', alpha=0.7))
plt.tight_layout()
plt.savefig('decoherence_explanation.png', dpi=300, bbox_inches='tight')
plt.show()
右下角的水平條形圖是整個退相干故事的總結。電子的相干時間約300年(藍色長條向右延伸),而貓的相干時間是 10⁻⁴⁰ 秒(紅色短條向左延伸到圖表邊緣之外)。50個數量級的差距,解釋了為什麼我們的日常世界「看起來」是經典的。
最後,程式碼輸出文字總結,並將退相干與老子的「道可道,非常道」做了精妙的連結。
print("\n" + "="*70)
print("【退相干:薛丁格的貓為什麼不現實?】")
print("="*70)
print("\n問題:")
print(" 如果量子疊加是真的,為什麼我們從沒見過「既死又活」的貓?")
print("\n答案:退相干(Decoherence)")
print(" • 宏觀物體與環境有無數次相互作用")
print(" • 每次相互作用都是一次「測量」")
print(" • 疊加態極快地坍縮")
print("\n數學:")
print(" 相干時間 τ ∝ 1 / (環境粒子數)")
print(" 電子: τ ≈ 10¹⁰ 秒 (可觀察)")
print(" 病毒: τ ≈ 10⁻³ 秒")
print(" 灰塵: τ ≈ 10⁻¹⁰ 秒")
print(" 貓: τ ≈ 10⁻⁴⁰ 秒 (根本無法觀察)")
print("\n關鍵洞見:")
print(" 1. 量子疊加是真的")
print(" 2. 但宏觀物體退相干太快,我們看不到")
print(" 3. 不是「量子力學不適用於宏觀」")
print(" 而是「宏觀物體太難隔離」")
print("\n老子的觀點:")
print(" 「道可道,非常道。」")
print(" → 一旦觀察/命名,「道」就變成「非常道」")
print(" → 退相干是自然界的「觀察」")
print("="*70)
# 執行
decoherence_simulation()



執行結果:
– 四張圖解釋退相干機制
– 量化說明:為什麼貓不能保持疊加態
– 對數尺度展示不同物體的相干時間
關鍵答案:
不是「量子力學不適用於貓」,而是「貓與環境的相互作用太多,疊加態瞬間坍縮」。
如果你能把貓完全隔離(理論上),它也能既死又活。但這在實踐中不可能。
「道」的不可道性:為什麼量子態無法直接觀察?
回到老子的核心命題:「道可道,非常道。」
用量子語言翻譯:
「可以測量的量子態,就不是原本的量子態。」
為什麼?
測量改變狀態
在量子力學中:
– 測量前:|ψ⟩ = α|0⟩ + β|1⟩ (疊加態)
– 測量後:|0⟩ 或 |1⟩ (確定態)
你永遠無法「看到」疊加態本身。
一旦你試圖觀察,疊加態就坍縮了。
這就像老子說的:
– 命名前:「道」是無分別的
– 命名後:「道」變成了「有」和「無」
你永遠無法「直接體驗」無分別的道。
一旦你試圖描述,分別就產生了。
「無名天地之始」——疊加態是本源
老子說:「無名天地之始。」
量子力學說:疊加態是最基本的狀態。
- 不是「|0⟩ 或 |1⟩ 是基本的,疊加態是特殊的」
- 而是「疊加態是基本的,確定態是測量的產物」
類似地:
– 不是「有和無是基本的,道是抽象的」
– 而是「道是基本的,有無是命名的產物」
「有名萬物之母」——測量創造確定性
老子說:「有名萬物之母。」
量子力學說:測量創造了確定性。
測量不是「發現」粒子在哪裡,而是「使得」粒子在某處。
類似地:
命名不是「發現」事物是什麼,而是「使得」事物有分別。
疊加態思維的現代迴響
量子計算:把「既是又不是」變成算力
量子電腦的核心就是疊加態。
經典電腦的位元是0或1。量子位元(qubit)是 α|0⟩ + β|1⟩。
一個量子位元同時代表兩種可能。兩個量子位元同時代表四種可能。n個量子位元同時代表2ⁿ種可能。
老子說「道生一,一生二,二生三,三生萬物」。量子計算把這個哲學命題變成了工程現實。
認知科學:人類決策中的「疊加態」
心理學家發現:人在做決策之前,偏好往往不是確定的。
你不是「喜歡A或B但不知道自己喜歡哪個」,而是「在被問到之前,偏好真的不存在」。
這叫做量子認知(Quantum Cognition)——用量子力學的數學結構來描述人類決策。
老子早就知道:「道可道,非常道」——在你表達偏好之前,偏好是不確定的。
禪宗公案:不二法門
禪宗的「不二法門」與量子疊加態異曲同工:
「不是風動,不是幡動,是仁者心動。」——六祖惠能
風和幡的運動不是獨立事實,而是依賴觀察者的詮釋。
測量創造現實。觀察創造世界。命名創造萬物。
深刻的哲學問題
問題1:在測量/命名之前,世界「存在」嗎?
量子力學的答案:
– 粒子在測量前沒有確定位置
– 但它「存在」於某種意義上(有波函數)
– 這種「存在」超越了「在這裡」或「在那裡」的分類
老子的答案:
– 萬物在命名前沒有分別相
– 但「道」「存在」於某種意義上
– 這種「存在」超越了「有」和「無」的分類
問題2:觀察/命名創造了什麼?
量子力學:
測量不創造粒子,但創造了確定性。
老子:
命名不創造事物,但創造了分別相。
問題3:我們能「知道」真相嗎?
量子力學:
你可以知道測量結果,但永遠無法「看到」測量前的疊加態。
老子:
你可以用語言描述「道」,但那個被描述的「道」已經不是原本的「道」。
共同結論:
真相超越了「可知」的範疇。不是因為我們不夠聰明,而是因為「知道」本身就改變了真相。
結語:在確定與不確定之間
薛丁格想用一隻貓來證明量子力學的荒謬。結果,他的貓成為了量子力學最偉大的代言人。
老子用五千字寫下了《道德經》,開篇就說:「道可道,非常道。」他知道,語言的限制不是缺陷,而是揭示了一個更深層的真相。
莊子夢見蝴蝶,醒來後問:誰是真的?2300年後,量子力學告訴我們:在測量之前,這個問題沒有答案。
三種傳統,三種語言,同一個洞見:
確定性不是世界的本質。
它是觀察的產物、命名的結果、測量的後果。
在盒子打開之前,貓既死又活。
在名字出現之前,道超越有無。
在醒來之前,莊周和蝴蝶同樣真實。
而這,或許才是最真實的真相。
