測不準原理 vs 佛教的「空性」——萬物無自性
系列:量子力學遇見東方哲學 #04/12 | 閱讀時間:30-35分鐘 | Python (NumPy, Matplotlib, SciPy, NetworkX)
作者:Wina @ Code & Cogito
黑爾戈蘭島的深夜
1927年2月,北海的黑爾戈蘭島(Helgoland)。
23歲的維爾納·海森堡(Werner Heisenberg)獨自站在懸崖邊,望著黑暗的大海。
他來到這個偏僻的小島是為了躲避慕尼黑的花粉症。但在這裡,他完成了物理學史上最深刻的發現之一。
前一天晚上,他終於推導出了矩陣力學的完整形式。凌晨3點,他算出了氫原子的能級——完美符合實驗!
興奮得無法入睡,他爬上島上的一座岩石,等待日出。
太陽升起時,他突然意識到一件事:
粒子沒有同時確定的位置和動量。
不是「有但我們測不準」,而是「真的沒有」。
這個洞見讓他震驚。幾個月後,他寫下了著名的不確定性原理:
Δx · Δp ≥ ℏ/2
其中:
– Δx = 位置的不確定性
– Δp = 動量的不確定性
– ℏ = 約化普朗克常數(1.055×10⁻³⁴ J·s)
這個公式只有5個符號,卻推翻了2000年來對「實在」的理解。
1976年,海森堡在回憶錄中寫道:
「那個夜晚,我第一次理解了:自然比我們的哲學深刻得多。」
不確定性原理:不是「測不準」,是「沒有」
常見誤解
很多人以為不確定性原理是說:
「我們的測量儀器不夠精密,所以測不準。」
錯!
海森堡說的是:
「粒子本身就沒有同時確定的位置和動量。」
這不是認知論(epistemology)的問題——我們知道什麼。
這是本體論(ontology)的問題——世界是什麼。
數學推導:從對易關係到不確定性
量子力學中,位置 x̂ 和動量 p̂ 是算符(operators),不是普通的數。
它們滿足對易關係:
[x̂, p̂] = x̂p̂ – p̂x̂ = iℏ
這意味著:測量位置和測量動量的順序會影響結果。
如果 x̂ 和 p̂ 對易(即 [x̂, p̂] = 0),那麼它們可以同時有確定值。
但它們不對易([x̂, p̂] = iℏ ≠ 0),所以它們不能同時有確定值。
從對易關係可以嚴格推導出:
Δx · Δp ≥ ℏ/2
這是數學定理,不是實驗誤差。
物理意義:波包
從波動力學的角度看,粒子是一個「波包」(wave packet)。
波包的數學形式:
ψ(x) = ∫ A(k) e^(ikx) dk
其中 k = 2π/λ 是波數,與動量的關係是 p = ℏk。
波包在空間的寬度 Δx 與波數的寬度 Δk 滿足:
Δx · Δk ≥ 1/2
轉換為動量:
Δx · Δp ≥ ℏ/2
物理圖像:
– Δx 小(位置確定) → 需要很多不同波長(Δk 大)疊加 → 動量不確定(Δp 大)
– Δk 小(動量確定) → 波包在空間擴散(Δx 大)→ 位置不確定
你不能同時讓波包既窄(位置確定)又純(動量確定)。
這不是技術限制,是波動的數學性質。
其他不確定性關係
不只位置和動量,任何兩個不對易的觀測量都有不確定性關係:
- 能量-時間: ΔE · Δt ≥ ℏ/2
- 角動量分量: Δ L_x · Δ L_y ≥ ℏ/2 |⟨L_z⟩|
- 自旋分量: Δ S_x · Δ S_y ≥ ℏ/2 |⟨S_z⟩|
一般形式:
Δ A · Δ B ≥ (1/2) |⟨[Â, B̂]⟩|
如果兩個物理量不對易,它們就不能同時確定。
佛教的「空性」:萬法無自性
公元2世紀,印度。
龍樹(Nāgārjuna)菩薩創立了大乘佛教的中觀派(Madhyamaka)。他的核心思想是:
一切法無自性,性空。
《中論》偈頌:
「因緣所生法,我說即是空。」
(Whatever is dependently co-arisen, that is explained to be emptiness.)
什麼是「空」(Śūnyatā)?
常見誤解
很多人以為「空」是說:
「一切都不存在,世界是虛幻的。」
錯!
龍樹說的「空」是:
「一切事物沒有獨立自存的本質(自性,svabhāva)。」
這不是虛無主義(nihilism)——說一切都不存在。
這是緣起論(dependent origination)——說一切都依賴條件而存在。
「自性」是什麼?
自性(svabhāva) 是指:
1. 獨立存在,不依賴其他事物
2. 固定不變,不隨條件改變
3. 可以單獨定義,不需要關係
佛教說:沒有任何事物具有自性。
「空」的三層意義
1. 空不是「無」
《心經》說:
「色不異空,空不異色;
色即是空,空即是色。」
翻譯:
– 色(rūpa)= 物質現象、形式
– 空(śūnyatā)= 空性
意思:
– 物質現象不離空性(色不異空)
– 空性不離物質現象(空不異色)
– 物質現象就是空性(色即是空)
– 空性就是物質現象(空即是色)
空不是「沒有東西」,而是「事物沒有固定本質」。
2. 空是「緣起」
龍樹說:「空即是緣起,緣起即是空。」
緣起(pratītyasamutpāda) 是指:一切事物因條件(緣)而生起,因條件而變化。
例子:
– 桌子依賴木材、釘子、木匠、工具、設計…
– 「桌子」這個概念依賴人類的分類習慣
– 沒有一個獨立存在的「桌子自性」
如果桌子有「自性」,它就應該:
– 不依賴木材(但它依賴)
– 不會變化(但它會腐朽)
– 不需要條件(但它需要被製造)
因此,桌子是「空」的——沒有自性。
3. 空破「執著」
佛教認為,痛苦的根源是執著(upādāna)。
我們執著於:
– 「我」有固定本質 → 我執
– 事物有固定本質 → 法執
「空性」的智慧能破除執著:
– 「我」是因緣和合,沒有獨立的「我」
– 萬物是因緣所生,沒有固定的「本質」
了悟「空」,就能放下執著,離苦得樂。
驚人的對應:不確定性 vs 空性
讓我們並排比較:
| 測不準原理 | 佛教空性 |
|---|---|
| 沒有固定屬性 | 沒有自性 |
| 粒子沒有同時確定的位置和動量 | 萬物沒有獨立自存的本質 |
| 不是「有但測不準」 | 不是「無但看不見」 |
| 而是「真的沒有」 | 而是「真的空」 |
| 屬性依賴測量 | 存在依賴條件 |
| 位置取決於如何測量 | 本質取決於觀察角度 |
| 測量方式改變,屬性改變 | 條件改變,性質改變 |
| 對易關係 | 緣起 |
| [x̂, p̂] = iℏ ≠ 0 | 此有故彼有 |
| 位置和動量互相制約 | 萬物互為因緣 |
| 無獨立實在 | 無自性 |
| 粒子不是「有位置的小球」 | 事物不是「有本質的實體」 |
結構對應,不是表面類比
再次強調:這不是說「量子力學證明了佛教對」。
而是說:兩者都指向了超越固定本質的實在結構。
- 量子力學從實驗發現:屬性不是固有的,是測量的產物
- 佛教從觀察發現:本質不是固有的,是因緣的產物
兩者都在說:固定性/自性不是世界的本質。
因陀羅網:一切互為因緣
《華嚴經》描述了帝釋天宮的「因陀羅網」(Indra’s Net):
天帝釋宮殿莊嚴,羅網覆上,一一網目,各有明珠。一一明珠,映現一切珠影;一一珠影,又映一切珠影。如是重重無盡,不可思議。
意思:
– 天宮有一張無限大的珠網
– 每個交叉點有一顆寶珠
– 每顆珠子反射所有其他珠子
– 每個反射又包含所有珠子的反射
– 無限遞迴,互相映照
哲學意義:
– 沒有獨立的珠子(每顆珠子包含整張網)
– 改變一顆珠子,所有珠子都變
– 部分包含整體,整體包含部分
– 一即一切,一切即一
量子糾纏:現代的因陀羅網
量子力學中,兩個粒子可以處於「糾纏態」(entangled state):
|ψ⟩ = (|↑↓⟩ – |↓↑⟩) / √2
糾纏態的特性:
– 粒子A和粒子B不可分離
– 測量A,瞬間影響B(即使相距光年)
– A的狀態無法單獨定義
– 整體大於部分之和
這與因陀羅網驚人相似:
– 每個粒子「反射」其他粒子的狀態
– 改變一個粒子,影響整個系統
– 沒有獨立的粒子狀態
貝爾不等式(1964)和阿斯佩實驗(1982)證明:
量子糾纏是真實的,不是隱變量。
2022年諾貝爾物理學獎就頒給了量子糾纏實驗。
Python模型:看見「不確定」的湧現
模型1:不確定性原理互動實驗
首先,我們引入必要的科學計算套件,並建立不確定性原理的核心類別。高斯波包是量子力學中最常用的波函數形式——它讓我們直觀看到「位置確定」與「動量確定」之間的拉鋸。
import numpy as np
import matplotlib.pyplot as plt
from scipy.fft import fft, fftfreq
# 設定中文字體
plt.rcParams['font.sans-serif'] = ['Microsoft JhengHei', 'Arial']
plt.rcParams['axes.unicode_minus'] = False
class UncertaintyPrinciple:
"""
不確定性原理互動實驗
展示:位置不確定性 vs 動量不確定性的trade-off
"""
def __init__(self):
self.hbar = 1.0 # 約化普朗克常數(任意單位)
def gaussian_wavepacket(self, x, x0, sigma_x, k0):
"""
高斯波包
x0: 中心位置
sigma_x: 位置標準差(不確定性)
k0: 中心波數(對應動量 p0 = ℏk0)
"""
return (1 / (2 * np.pi * sigma_x**2)**0.25) * \
np.exp(-((x - x0)**2) / (4 * sigma_x**2)) * \
np.exp(1j * k0 * x)
def momentum_distribution(self, psi_x, dx):
"""
從位置空間波函數計算動量空間波函數
使用傅立葉變換
"""
psi_k = fft(psi_x) * dx
return psi_k
接下來是視覺化的核心:我們用四組不同的 sigma_x 值生成波包,然後透過傅立葉變換得到對應的動量分佈。這段程式碼的關鍵在於——當波包在位置空間越窄(Δx 小),它在動量空間就越寬(Δp 大),反之亦然。這不是數值誤差,是傅立葉變換的數學必然。
def visualize_uncertainty(self, sigma_x_values=[0.5, 1.0, 2.0, 4.0]):
"""
視覺化不同位置不確定性下的波包
"""
x = np.linspace(-20, 20, 2000)
dx = x[1] - x[0]
fig, axes = plt.subplots(2, len(sigma_x_values), figsize=(18, 10))
for i, sigma_x in enumerate(sigma_x_values):
# 生成波包
psi_x = self.gaussian_wavepacket(x, x0=0, sigma_x=sigma_x, k0=5)
# 位置空間機率密度
prob_x = np.abs(psi_x)**2
# 動量空間
psi_k = self.momentum_distribution(psi_x, dx)
k = fftfreq(len(x), dx) * 2 * np.pi
prob_k = np.abs(psi_k)**2
# 重新排序(fft的輸出需要重新排列)
k_sorted_idx = np.argsort(k)
k_sorted = k[k_sorted_idx]
prob_k_sorted = prob_k[k_sorted_idx]
# 計算不確定性
delta_x = sigma_x
delta_k = 1 / (2 * sigma_x)
delta_p = self.hbar * delta_k
uncertainty_product = delta_x * delta_p
每一組波包都生成上下兩張圖:上方是位置空間的機率密度(藍色),下方是動量空間的機率密度(紅色)。注意不確定性乘積 Δx·Δp 始終大於或等於 ℏ/2——這正是海森堡不確定性原理的數學體現。
# === 上圖:位置空間 ===
ax = axes[0, i]
ax.plot(x, prob_x, 'b-', linewidth=2)
ax.fill_between(x, 0, prob_x, alpha=0.3, color='blue')
ax.set_xlabel('位置 x', fontsize=11)
ax.set_ylabel('|ψ(x)|²', fontsize=11)
ax.set_title(f'位置不確定性\nΔx = {delta_x:.2f}',
fontsize=12, fontweight='bold', color='blue')
ax.grid(True, alpha=0.3)
ax.set_xlim(-15, 15)
ax.axvspan(-delta_x, delta_x, alpha=0.2, color='cyan',
label=f'Δx = {delta_x:.2f}')
ax.legend(fontsize=9)
# === 下圖:動量空間 ===
ax = axes[1, i]
center_idx = len(k_sorted) // 2
plot_range = 500
k_plot = k_sorted[center_idx-plot_range:center_idx+plot_range]
prob_k_plot = prob_k_sorted[center_idx-plot_range:center_idx+plot_range]
if np.max(prob_k_plot) > 0:
prob_k_plot = prob_k_plot / np.max(prob_k_plot)
ax.plot(k_plot, prob_k_plot, 'r-', linewidth=2)
ax.fill_between(k_plot, 0, prob_k_plot, alpha=0.3, color='red')
ax.set_xlabel('波數 k (動量 p=ℏk)', fontsize=11)
ax.set_ylabel('|ψ(k)|²', fontsize=11)
ax.set_title(f'動量不確定性\nΔp = {delta_p:.2f}',
fontsize=12, fontweight='bold', color='red')
ax.grid(True, alpha=0.3)
color = 'green' if uncertainty_product >= self.hbar/2 else 'red'
ax.text(0.5, 0.9,
f'Δx·Δp = {uncertainty_product:.3f}\n(ℏ/2 = {self.hbar/2:.3f})',
transform=ax.transAxes, ha='center', fontsize=10,
bbox=dict(boxstyle='round', facecolor=color, alpha=0.5))
fig.text(0.5, 0.98, '不確定性原理:Δx 越小 → Δp 越大',
ha='center', fontsize=16, fontweight='bold')
fig.text(0.5, 0.02,
'關鍵洞見:這不是測量誤差,是波動的數學性質!\n'
'你不能同時讓波包既窄(位置確定)又純(動量確定)',
ha='center', fontsize=11,
bbox=dict(boxstyle='round', facecolor='yellow', alpha=0.5))
plt.tight_layout()
plt.subplots_adjust(top=0.93, bottom=0.1)
plt.savefig('uncertainty_principle_visualization.png', dpi=300, bbox_inches='tight')
plt.show()
最後一段是互動式測量實驗的文字輸出。它模擬了「先測位置再測動量」與「先測動量再測位置」兩種情境,揭示測量順序會徹底改變結果——因為位置算符和動量算符不對易。這裡也帶出了佛教的類比:萬物沒有固定的「自性」,屬性依賴觀察方式而顯現。
def interactive_measurement(self):
"""
互動式測量:觀察測量順序的影響
"""
print("\n" + "="*70)
print("【不確定性原理互動實驗】")
print("="*70)
x = np.linspace(-10, 10, 1000)
sigma_x = 1.0
psi = self.gaussian_wavepacket(x, x0=0, sigma_x=sigma_x, k0=5)
print("\n初始狀態:")
print(f" 位置不確定性 Δx ≈ {sigma_x:.2f}")
print(f" 動量不確定性 Δp ≈ {self.hbar/(2*sigma_x):.2f}")
print(f" 不確定性乘積 Δx·Δp ≈ {sigma_x * self.hbar/(2*sigma_x):.3f}")
print(f" 海森堡下限 ℏ/2 = {self.hbar/2:.3f}")
print("\n實驗1:先測位置,再測動量")
print(" → 測位置後,波函數坍縮到某個位置")
print(" → 此時 Δx → 0,因此 Δp → ∞")
print(" → 動量完全不確定!")
print("\n實驗2:先測動量,再測位置")
print(" → 測動量後,波函數變成平面波")
print(" → 此時 Δp → 0,因此 Δx → ∞")
print(" → 位置完全不確定!")
print("\n結論:")
print(" • 測量順序很重要(x̂ 和 p̂ 不對易)")
print(" • 測量一個量會擾動另一個量")
print(" • 不是儀器問題,是自然法則")
print("\n佛教類比:")
print(" • 萬物沒有固定的「自性」")
print(" • 屬性依賴觀察方式")
print(" • 從不同角度看,看到不同面向")
print("="*70)
# 執行
experiment = UncertaintyPrinciple()
experiment.visualize_uncertainty(sigma_x_values=[0.5, 1.0, 2.0, 4.0])
experiment.interactive_measurement()
執行結果:
– 4組對比圖,展示不同 Δx 對應的 Δp
– 清楚看到:Δx 小時,Δp 大;Δx 大時,Δp 小
– 不確定性乘積 Δx·Δp 總是 ≥ ℏ/2
關鍵洞見:
這不是「測量不夠精密」。這是波動的數學性質。
你要波包窄(位置確定),就必須用很多波長疊加(動量不確定)。
模型2:「空性」的視覺化——事物依條件而顯
這個模型用日常經驗來視覺化「空性」的概念。我們以杯子為例:從上面看是圓形,從側面看是矩形。杯子的「真實形狀」是什麼?答案是——沒有獨立於觀察角度的「固定形狀」。
def visualize_emptiness():
"""
「空性」的視覺化
展示:事物的屬性如何依賴觀察條件
"""
fig = plt.figure(figsize=(16, 12))
# === 示例:「杯子」的空性 ===
# 子圖1:不同角度看到不同形狀
ax1 = fig.add_subplot(2, 3, 1)
circle = plt.Circle((0.5, 0.5), 0.3, fill=False, edgecolor='blue', linewidth=3)
ax1.add_patch(circle)
ax1.text(0.5, 0.1, '從上面看:圓形', ha='center', fontsize=12, fontweight='bold')
ax1.set_xlim(0, 1)
ax1.set_ylim(0, 1)
ax1.set_aspect('equal')
ax1.axis('off')
# 子圖2:從側面看:矩形
ax2 = fig.add_subplot(2, 3, 2)
rect = plt.Rectangle((0.2, 0.2), 0.6, 0.6, fill=False, edgecolor='red', linewidth=3)
ax2.add_patch(rect)
ax2.text(0.5, 0.1, '從側面看:矩形', ha='center', fontsize=12, fontweight='bold')
ax2.set_xlim(0, 1)
ax2.set_ylim(0, 1)
ax2.set_aspect('equal')
ax2.axis('off')
# 子圖3:問題
ax3 = fig.add_subplot(2, 3, 3)
ax3.text(0.5, 0.5, '問:杯子的\n「真實形狀」是?\n\n答:沒有\n「固定形狀」!\n\n形狀依賴\n觀察角度',
ha='center', va='center', fontsize=13,
bbox=dict(boxstyle='round', facecolor='yellow', alpha=0.7))
ax3.set_xlim(0, 1)
ax3.set_ylim(0, 1)
ax3.axis('off')
接著,下排三張圖將同樣的邏輯延伸到量子世界。測量「位置」得到一種分佈,測量「動量」得到另一種分佈——粒子的「真實狀態」同樣沒有獨立於測量方式的固定答案。這正是空性與測不準原理的結構對應。
# === 量子類比:粒子的「位置」===
# 子圖4:位置測量
ax4 = fig.add_subplot(2, 3, 4)
x = np.linspace(-5, 5, 1000)
psi_position = np.exp(-x**2)
ax4.plot(x, psi_position, 'b-', linewidth=3)
ax4.fill_between(x, 0, psi_position, alpha=0.3, color='blue')
ax4.set_xlabel('位置', fontsize=11)
ax4.set_ylabel('機率', fontsize=11)
ax4.set_title('測量「位置」\n→ 位置確定', fontsize=12, fontweight='bold', color='blue')
ax4.grid(True, alpha=0.3)
# 子圖5:動量測量
ax5 = fig.add_subplot(2, 3, 5)
k = np.linspace(-5, 5, 1000)
psi_momentum = np.exp(-(k-2)**2/4)
ax5.plot(k, psi_momentum, 'r-', linewidth=3)
ax5.fill_between(k, 0, psi_momentum, alpha=0.3, color='red')
ax5.set_xlabel('動量', fontsize=11)
ax5.set_ylabel('機率', fontsize=11)
ax5.set_title('測量「動量」\n→ 動量確定', fontsize=12, fontweight='bold', color='red')
ax5.grid(True, alpha=0.3)
# 子圖6:結論
ax6 = fig.add_subplot(2, 3, 6)
ax6.text(0.5, 0.5, '問:粒子的\n「真實狀態」是?\n\n答:沒有\n「固定屬性」!\n\n屬性依賴\n測量方式',
ha='center', va='center', fontsize=13,
bbox=dict(boxstyle='round', facecolor='lightblue', alpha=0.7))
ax6.set_xlim(0, 1)
ax6.set_ylim(0, 1)
ax6.axis('off')
最後加上標題和文字說明,並輸出空性三層意義的對照。這段程式碼的輸出特別值得注意:它把佛教的「緣起」和量子力學的「測量依賴性」放在同一個框架裡——世界不是由「固定屬性的物體」組成,而是由「依條件而顯的關係」組成。
# 總標題與對應說明
fig.text(0.5, 0.98, '「空性」與「測不準」的結構對應',
ha='center', fontsize=16, fontweight='bold')
fig.text(0.5, 0.02,
'佛教:事物沒有「自性」(固定本質),屬性依條件而顯\n'
'量子力學:粒子沒有「確定屬性」,屬性依測量而定\n'
'共同點:「固定性」不是實在的本質',
ha='center', fontsize=11,
bbox=dict(boxstyle='round', facecolor='lightyellow', alpha=0.7))
plt.tight_layout()
plt.subplots_adjust(top=0.93, bottom=0.12)
plt.savefig('emptiness_visualization.png', dpi=300, bbox_inches='tight')
plt.show()
# 文字說明
print("\n" + "="*70)
print("【空性的三層意義】")
print("="*70)
print("\n1. 空不是「無」")
print(" 《心經》:「色即是空,空即是色」")
print(" → 事物存在,但沒有固定本質")
print("\n2. 空是「緣起」")
print(" 龍樹:「因緣所生法,我說即是空」")
print(" → 一切依條件而存在")
print("\n3. 空破「執著」")
print(" → 沒有固定的「我」")
print(" → 沒有固定的「物」")
print(" → 了悟空性,放下執著")
print("\n與測不準原理的對應:")
print(" • 粒子沒有固定的「位置」或「動量」")
print(" • 屬性依測量方式而定")
print(" • 沒有獨立於觀察的「客觀屬性」")
print("\n共同洞見:")
print(" 世界不是由「固定屬性的物體」組成")
print(" 而是由「依條件而顯的關係」組成")
print("="*70)
# 執行
visualize_emptiness()
執行結果:
– 上排:杯子從不同角度看到不同形狀
– 下排:粒子測量位置vs動量得到不同結果
– 視覺化「屬性依賴觀察」
哲學洞見:
佛教:屬性依「觀察角度」
量子:屬性依「測量方式」
共同點:沒有獨立於觀察的固定屬性
模型3:因陀羅網——量子糾纏的視覺化
這個模型用 NetworkX 建立兩個並列的網絡:一個是華嚴宗的因陀羅網(2D 網格),另一個是量子糾纏網絡(3D 隨機分佈的粒子)。紅色高亮的節點代表「被改變的那一顆珠子」——在因陀羅網中,改變一顆珠子會改變整張網的映照;在量子糾纏中,測量一個粒子會瞬間影響所有糾纏的粒子。
import networkx as nx
from mpl_toolkits.mplot3d import Axes3D
def indras_net_quantum():
"""
因陀羅網與量子糾纏
展示:一切互相連結,改變一個影響全體
"""
fig = plt.figure(figsize=(18, 12))
# === 左圖:因陀羅網(2D網絡)===
ax1 = fig.add_subplot(2, 2, 1)
n = 5
G = nx.grid_2d_graph(n, n)
pos = {(i, j): (i, j) for i, j in G.nodes()}
nx.draw_networkx_nodes(G, pos, node_color='gold', node_size=800,
edgecolors='black', linewidths=2, ax=ax1)
nx.draw_networkx_edges(G, pos, edge_color='gray', width=2, ax=ax1)
highlight_node = (2, 2)
nx.draw_networkx_nodes(G, pos, nodelist=[highlight_node],
node_color='red', node_size=1000,
edgecolors='black', linewidths=3, ax=ax1)
ax1.set_title('因陀羅網:每顆珠子映現一切\n改變一顆,影響全部',
fontsize=13, fontweight='bold')
ax1.axis('off')
ax1.text(2, -0.5, '華嚴宗:一即一切,一切即一',
ha='center', fontsize=11,
bbox=dict(boxstyle='round', facecolor='lightyellow', alpha=0.7))
# === 右圖:量子糾纏網絡(3D)===
ax2 = fig.add_subplot(2, 2, 2, projection='3d')
n_particles = 8
positions = np.random.randn(n_particles, 3)
ax2.scatter(positions[:, 0], positions[:, 1], positions[:, 2],
c='cyan', s=300, edgecolors='black', linewidth=2, alpha=0.8)
for i in range(n_particles):
for j in range(i+1, n_particles):
ax2.plot([positions[i, 0], positions[j, 0]],
[positions[i, 1], positions[j, 1]],
[positions[i, 2], positions[j, 2]],
'b-', alpha=0.2, linewidth=1)
ax2.scatter([positions[0, 0]], [positions[0, 1]], [positions[0, 2]],
c='red', s=500, edgecolors='black', linewidth=3, zorder=10)
ax2.set_title('量子糾纏:粒子間非局域關聯\n測量一個,影響全部',
fontsize=13, fontweight='bold')
ax2.set_xlabel('X')
ax2.set_ylabel('Y')
ax2.set_zlabel('Z')
下半部分的兩張子圖用文字方塊呈現糾纏態的數學結構與哲學對應。左下方列出 Bell 態的公式與貝爾不等式的實驗驗證歷程;右下方則將因陀羅網與量子糾纏的特徵逐條對照。兩者的共同結論是:世界不是「獨立個體的集合」,而是「相互依存的關係網」。
# === 下左:糾纏態數學 ===
ax3 = fig.add_subplot(2, 2, 3)
ax3.axis('off')
text = '''
糾纏態(Bell態):
|ψ⟩ = (|↑↓⟩ - |↓↑⟩) / √2
特性:
• 粒子A和B不可分離
• 測量A → 立刻知道B
• A的狀態無法單獨定義
• 整體 ≠ 部分之和
貝爾不等式(1964):
如果粒子有「定域實在性」
→ 應滿足某個不等式
實驗結果(1982-2022):
不等式被違反!
→ 沒有定域實在性
→ 糾纏是真實的
'''
ax3.text(0.1, 0.5, text, fontsize=11, va='center', family='monospace',
bbox=dict(boxstyle='round', facecolor='lightblue', alpha=0.7))
# === 下右:因陀羅網與糾纏的對應 ===
ax4 = fig.add_subplot(2, 2, 4)
ax4.axis('off')
comparison = '''
【因陀羅網 vs 量子糾纏】
因陀羅網:
• 每顆珠子包含整張網
• 改變一珠,全網皆動
• 部分即整體
• 一即一切
量子糾纏:
• 每個粒子包含整個系統信息
• 測量一粒子,影響所有糾纏粒子
• 粒子態不可單獨定義
• 整體不可分解
共同點:
→ 沒有「獨立」的部分
→ 一切互相依存
→ 改變局部 = 改變整體
'''
ax4.text(0.1, 0.5, comparison, fontsize=11, va='center',
bbox=dict(boxstyle='round', facecolor='lightyellow', alpha=0.7))
plt.tight_layout()
plt.savefig('indras_net_entanglement.png', dpi=300, bbox_inches='tight')
plt.show()
程式碼的最後一段輸出詳細的文字對照,從《華嚴經》到阿斯佩實驗、從2022年諾貝爾獎到佛教緣起法,將歷史軸線與哲學洞見交織在一起。
# 數據說明
print("\n" + "="*70)
print("【因陀羅網與量子糾纏】")
print("="*70)
print("\n《華嚴經》的因陀羅網:")
print(" • 無限大的珠網")
print(" • 每顆珠子反射所有珠子")
print(" • 無限遞迴,互相映照")
print(" → 一即一切,一切即一")
print("\n量子糾纏(Entanglement):")
print(" • 兩個或多個粒子處於糾纏態")
print(" • |ψ⟩ = (|↑↓⟩ - |↓↑⟩) / √2")
print(" • 測量一個粒子,瞬間影響其他粒子")
print(" • 即使相距光年,仍然關聯")
print("\n實驗證據:")
print(" • 1982年:阿斯佩實驗證實糾纏")
print(" • 2015年:「無漏洞」貝爾實驗")
print(" • 2022年:諾貝爾物理學獎")
print("\n哲學意義:")
print(" • 沒有「獨立」的粒子")
print(" • 宇宙是一個不可分割的整體")
print(" • 「分離」是幻覺")
print("\n佛教「緣起」:")
print(" • 此有故彼有,此生故彼生")
print(" • 一切法互為因緣")
print(" • 沒有獨立自存的「我」或「物」")
print("\n共同洞見:")
print(" 世界不是「獨立個體的集合」")
print(" 而是「相互依存的關係網」")
print("="*70)
# 執行
indras_net_quantum()
執行結果:
– 四張圖展示因陀羅網與量子糾纏的對應
– 2D網絡 + 3D糾纏可視化
– 數學公式 + 對比表
深刻洞見:
華嚴宗在1500年前用因陀羅網描述的宇宙結構,與量子糾纏揭示的非局域關聯,驚人相似!
模型4:「我」的空性——自我是糾纏態
這個模型把佛教「無我」的概念視覺化為兩張對比圖。左圖是我們習慣的「經典自我觀」:一個紅色的「我」居中,周圍環繞著家人、朋友、工作、身體、記憶、想法——彷彿「我」是獨立存在的核心,擁有這一切。
def self_as_entanglement():
"""
「我」的空性
展示:「自我」如何是因緣和合,沒有獨立自性
"""
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(16, 8))
# === 左圖:經典的「自我」觀念 ===
circle_self = plt.Circle((0.5, 0.5), 0.15, color='red', alpha=0.7,
edgecolor='black', linewidth=3)
ax1.add_patch(circle_self)
ax1.text(0.5, 0.5, '我', ha='center', va='center', fontsize=20,
fontweight='bold', color='white')
external_things = [
(0.2, 0.8, '家人'),
(0.8, 0.8, '朋友'),
(0.1, 0.5, '工作'),
(0.9, 0.5, '身體'),
(0.2, 0.2, '記憶'),
(0.8, 0.2, '想法'),
]
for x, y, label in external_things:
circle = plt.Circle((x, y), 0.08, color='lightblue', alpha=0.5,
edgecolor='gray', linewidth=1.5)
ax1.add_patch(circle)
ax1.text(x, y, label, ha='center', va='center', fontsize=10)
ax1.annotate('', xy=(x, y), xytext=(0.5, 0.5),
arrowprops=dict(arrowstyle='->', lw=1.5, color='black', alpha=0.5))
ax1.set_xlim(0, 1)
ax1.set_ylim(0, 1)
ax1.set_aspect('equal')
ax1.axis('off')
ax1.set_title('經典觀念:獨立的「我」\n「我」擁有身體、記憶、想法...',
fontsize=14, fontweight='bold')
ax1.text(0.5, 0.05, '假設:有一個獨立的「自我」核心',
ha='center', fontsize=11,
bbox=dict(boxstyle='round', facecolor='lightcoral', alpha=0.7))
右圖則呈現佛教的「五蘊」觀:沒有中心,只有身、受、想、行、識五個元素互相連結。「我」不是獨立的實體,而是這五蘊因緣和合的暫時模式——就像粒子不是獨立的「小球」,而是場的激發模式。
# === 右圖:佛教的「無我」===
elements = [
(0.3, 0.7, '身'),
(0.7, 0.7, '受'),
(0.5, 0.5, '想'),
(0.3, 0.3, '行'),
(0.7, 0.3, '識'),
]
for x, y, label in elements:
circle = plt.Circle((x, y), 0.1, color='lightgreen', alpha=0.6,
edgecolor='green', linewidth=2)
ax2.add_patch(circle)
ax2.text(x, y, label, ha='center', va='center', fontsize=12,
fontweight='bold')
for i, (x1, y1, _) in enumerate(elements):
for x2, y2, _ in elements[i+1:]:
ax2.plot([x1, x2], [y1, y2], 'g-', alpha=0.3, linewidth=2)
ax2.set_xlim(0, 1)
ax2.set_ylim(0, 1)
ax2.set_aspect('equal')
ax2.axis('off')
ax2.set_title('佛教觀念:「五蘊」無我\n沒有獨立的「我」,只有因緣和合',
fontsize=14, fontweight='bold')
ax2.text(0.5, 0.05, '真相:「我」是五蘊(身、受、想、行、識)的暫時組合',
ha='center', fontsize=11,
bbox=dict(boxstyle='round', facecolor='lightgreen', alpha=0.7))
plt.tight_layout()
plt.savefig('self_emptiness.png', dpi=300, bbox_inches='tight')
plt.show()
程式碼的文字輸出部分將五蘊理論與量子態的數學表達做了精彩的類比。粒子的狀態可以用不同基底展開(位置基底、動量基底),沒有哪個基底是「本質」的——同樣地,「我」可以從身體、記憶、環境等不同面向去理解,但沒有哪個面向是獨立存在的「我核心」。
# 量子類比
print("\n" + "="*70)
print("【「我」的空性:自我是糾纏態】")
print("="*70)
print("\n佛教的「五蘊」理論:")
print(" 1. 色蘊(rūpa):身體、物質")
print(" 2. 受蘊(vedanā):感受")
print(" 3. 想蘊(saṃjñā):概念、認知")
print(" 4. 行蘊(saṃskāra):意志、行為傾向")
print(" 5. 識蘊(vijñāna):意識")
print("\n佛教主張:")
print(" • 沒有獨立的「我」")
print(" • 「我」只是五蘊的暫時組合")
print(" • 五蘊因緣和合 → 「我」的幻覺產生")
print(" • 五蘊分散 → 「我」消失")
print("\n量子類比:")
print(" • 粒子沒有獨立的「狀態」")
print(" • 「狀態」是測量基底的投影")
print(" • 系統可以分解為不同基底:")
print(" |ψ⟩ = Σ cᵢ|φᵢ⟩ (位置基底)")
print(" |ψ⟩ = Σ dⱼ|χⱼ⟩ (動量基底)")
print(" • 沒有「本質」狀態,只有相對於基底的表達")
print("\n「我」如何是糾纏態:")
print(" |我⟩ = α|身體⟩|記憶⟩|環境⟩... (簡化表達)")
print(" ")
print(" • 「我」與身體糾纏(改變身體 → 改變「我」)")
print(" • 「我」與記憶糾纏(失憶 → 「我」改變)")
print(" • 「我」與環境糾纏(環境變 → 「我」變)")
print(" • 沒有獨立於這些的「我核心」")
print("\n實踐意義:")
print(" • 執著「我」是痛苦根源")
print(" • 了悟「無我」能解脫")
print(" • 不是「我不存在」,而是「我無自性」")
print(" • 「我」依因緣而有,因緣變則「我」變")
print("\n深刻問題:")
print(" 如果「我」沒有自性,那「誰」在讀這段文字?")
print(" 答:讀的過程在發生,但沒有獨立的「讀者」。")
print(" 就像波函數坍縮在發生,但沒有獨立的「粒子」。")
print("="*70)
# 執行
self_as_entanglement()



執行結果:
– 左圖:經典的「自我」觀念(獨立的「我」)
– 右圖:佛教的「五蘊」(無獨立的「我」)
– 量子類比:「我」如何是糾纏態
最深刻的洞見:
「我」不是一個獨立的實體,而是身心環境因緣和合的暫時模式。
就像粒子不是獨立的「小球」,而是場的激發模式。
愛因斯坦最後的疑問
1955年4月18日,愛因斯坦去世前幾天。
他給朋友寫了最後一封信,討論量子力學:
「我無法相信上帝會擲骰子…也許我們只是還沒找到更深層的理論。」
愛因斯坦至死都不接受量子力學的不確定性。
他相信:
– 必定有「隱變量」(hidden variables)
– 粒子真的有確定的位置和動量
– 只是我們不知道
但他錯了。
1964年,約翰·貝爾推導出「貝爾不等式」:
– 如果隱變量存在 → 實驗應滿足某個不等式
– 量子力學預測 → 違反這個不等式
1982-2022年,無數實驗證明:不等式被違反。
結論:沒有隱變量。不確定性是本質。
愛因斯坦的直覺——「實在應該是確定的」——被實驗推翻了。
佛陀會怎麼說?
如果佛陀知道不確定性原理,他可能會說:
「這正是我說的『無自性』。
粒子沒有固定的位置和動量,就像萬物沒有固定的本質。
屬性依條件而顯,就像一切法依緣而起。
不確定性不是缺陷,是實在的本質。」
思考題
-
海森堡說「粒子沒有同時確定的位置和動量」,這與日常經驗矛盾嗎?為什麼?
-
如果不確定性是本質,那麼「確定性」從哪裡來?為什麼宏觀世界看起來是確定的?
-
佛教說「我無自性」,那麼「誰」在體悟「無我」?這是悖論嗎?
-
量子糾纏能「證明」一切互相依存嗎?還是只是一個類比?
-
如果接受「萬物無自性」,這會改變你的生活方式嗎?如何改變?
結語
海森堡在黑爾戈蘭島等待日出的那個清晨,他看到了一個讓他震驚的真理:粒子沒有固定的屬性。
2500年前,龍樹菩薩在印度寫下了同樣讓人震驚的洞見:萬物沒有固定的本質。
他們使用的語言不同——一個用數學,一個用哲學。他們的方法不同——一個做實驗,一個做冥想。
但他們指向同一個方向:
「固定性」不是世界的本質。
不確定性不是缺陷,空性不是虛無。
它們都是對實在更深層結構的描述:
一切依條件而存在,依關係而顯現。
當我們用Python模擬波包的不確定性,當我們視覺化五蘊的無我結構,我們不只是在做學術練習。
我們在體驗一種看世界的新方式。
也許,這正是海森堡所說的:「自然比我們的哲學深刻得多。」
