8.1 邏輯斯蒂映射#
概念說明#
邏輯斯蒂映射是生態學中「人口比例」模型的離散化:
\[ x_{k+1} = r\, x_k (1 - x_k), \qquad x_k \in [0, 1],\ r \in (0, 4] \]
\(x\) 是某物種占環境容量的比例, \(r\) 是繁殖率。它只有一個乘法與一個減法,卻是混沌理論的果蠅——幾乎所有混沌現象都能在這裡觀察。
隨 \(r\) 增大,長期行為(軌道極限集)經歷完整的「異變路線」:
- \(0 < r \le 1\) : \(x \to 0\) (滅絕)。
- \(1 < r < 3\) :收斂到不動點 \(x^* = 1 - 1/r\) 。用 2.1 節判據: \(g'(x^*) = 2 - r\) , \(|2 - r| < 1 \iff 1 < r < 3\) ,完全吻合。
- \(r = 3\) :不動點失穩(導數絕對值達 1),誕生週期 2 軌道——每次在兩個值之間輪迴。
- \(3 < r < 4\) :週期倍增級聯:週期 2 → 4 → 8 → …,分岔點 \(r_n\) 以幾何速度逼近極限 \(r_\infty \approx 3.5699\) ,相鄰分岔間距之比收斂到 Feigenbaum 常數 \(\delta \approx 4.6692\) ——普适於所有單峰映射,是混沌理論最深刻的發現之一。
- \(r_\infty < r \le 4\) :混沌。軌道永不重複、有界卻非週期;相鄰軌道以 Lyapunov 指數 \(\lambda = \lim \frac{1}{n}\sum \ln|g'(x_k)| > 0\) 的指數速率分離。浮點精度只有 16 位,意味著預測時限約 \(\ln(10^{16})/\lambda \approx 37/\lambda\) 步——之後的軌跡與真值完全脫鉤(確定性系統的不可預測性)。
混沌區內還藏著週期窗口(如 \(r \approx 3.83\) 的週期 3)與自我相似的精細結構。對初始條件的敏感依賴(蝴蝶效應)正是 \(\lambda > 0\) 的通俗說法。
生活類比#
繁殖率低時,族群年年穩定;繁殖率適中時,族群隔年暴增暴減輪流(週期 2,像「大小年」);繁殖率太高時,系統變得無法預測——同樣的起點,明年結果卻截然不同,如同天氣:規則簡單,長期預報注定失準。
演算法步驟#
繪製分岔圖(pitchfork 圖)的流程:
- 對每個參數 \(r\) (橫軸,步長約 0.001):
- 從隨機 \(x_0\) 迭代若干步(如 100)丟棄(暫態,讓軌道「落進」吸引子)。
- 再迭代 \(M\) 步(如 200),把每個 \(x_k\) 畫在縱軸上。
- 吸引子是點(穩定)、幾點(週期)或密布區間(混沌)。
計算 Lyapunov 指數:沿軌道累加 \(\ln|g'(x_k)| = \ln|r(1 - 2x_k)|\) ,除以步數。
Python 範例#
import numpy as np
def bifurcation_points(r, n_trans=100, n_keep=200, x=0.5):
"""回傳 r 下的吸引子樣本"""
for _ in range(n_trans):
x = r * x * (1 - x)
pts = []
for _ in range(n_keep):
x = r * x * (1 - x)
pts.append(x)
return pts
# 檢查幾個代表性 r
for r in [2.5, 3.2, 3.5, 3.83, 3.9]:
pts = bifurcation_points(r)
uniq = np.unique(np.round(pts, 4))
print(f"r = {r}: 吸引子 ≈ {uniq[:8]}({len(uniq)} 個樣本值)")
# Lyapunov 指數隨 r 的變化
def lyapunov(r, n=1000, x=0.4):
total = 0.0
for _ in range(n):
x = r * x * (1 - x)
total += np.log(abs(r * (1 - 2 * x)))
return total / n
for r in [3.0, 3.5, 3.9]:
print(f"r = {r}: λ ≈ {lyapunov(r):+.4f}"
f"({'混沌' if lyapunov(r) > 0 else '穩定/週期'})")
# 分岔圖資料(可配合 matplotlib 繪圖)
# rs = np.linspace(2.5, 4.0, 1500)
# for r in rs:
# xs = bifurcation_points(r)
# plt.plot([r]*len(xs), xs, ',k', alpha=0.25)
複雜度與收斂性分析#
單步迭代 \(O(1)\) ,模擬 \(n\) 步即 \(O(n)\) 。分析方法上,本例是 2.1 節局部收斂判據的活教材:不動點穩定性由 \(|g'(x^*)|\) 是否小於 1 決定,失穩( \(|g'| = 1\) )即分岔誕生週期軌道。混沌的量化指標:Lyapunov 指數 \(\lambda > 0\) ;可預測時限 \(\approx \ln(\text{精度})/\lambda\) ,對雙精度與 \(\lambda \approx 0.7\) ( \(r = 4\) 時 \(\lambda = \ln 2\) )約為 50 步——再精確的浮點也買不到長期預測。Feigenbaum 分析則顯示:即使「不收斂」的迭代,其結構(分岔比的極限)仍有普适規律。
練習#
- 實測週期 2 的兩個軌道值( \(r = 3.2\) ),驗證它們滿足 \(g(g(x)) = x\) 且不滿足 \(g(x) = x\) 。
- 畫出(或計算) \(r \in [2.9, 4.0]\) 的分岔圖,估算 Feigenbaum 常數(用最後幾個分岔點的間距比)。
- 取 \(r = 3.9\) 、兩個初始值差 \(10^{-15}\) ,迭代 60 步記錄軌道差,驗證指數放大並估算 \(\lambda\) 。