M2.0 河面上的箭頭:Vector Field 與 ODE
本篇重用1 篇
一條河與一片葉子
你站在橋上往下看。靠岸的水流慢,中間快;過了橋墩以後往左彎,再往前又擺回來。假設有一張「水流地圖」,告訴我們接下來一分鐘裡,每個位置、每個時刻的水往哪裡流、流多快。只有此刻的一張照片還不夠,因為後來的水流可能改變。
現在你把一片葉子輕輕放在腳下的水面上。一分鐘後,它會在哪裡?
最自然的想法是順著箭頭走:到了新位置,再看那裡的箭頭。不過,這條規則真的會決定一條路嗎? 如果在同一位置、同一時刻放兩片葉子,它們會走出相同的軌跡嗎?先把「順著箭頭」寫清楚,才有辦法檢查。
課堂提問Q1
把這個情境翻成數學問題。「水流地圖」是什麼樣的數學物件?「葉子的位置」是什麼?「順著箭頭走」要怎麼寫成一條式子?
先想一想,再展開看整理後的答案
最直覺的說法是「地圖是一堆箭頭」,這已經抓到了一半。往下把它寫精確:
水流地圖是一個函數。 河面上每個位置 ,在時刻 ,對應一支箭頭 ——方向是水流方向,長度是流速。這樣「把位置對到向量」的函數叫做 vector field(每點一支箭頭的場)。如果水流不隨時間改變,就寫 ,叫 autonomous(不依賴時間)。
葉子的位置是一條隨時間變化的曲線 , 是你放葉子的地方。
「順著箭頭走」是說:葉子此刻的速度,等於它所在位置的水流。 速度是位置對時間的導數,所以
這就是一條 ODE(ordinary differential equation:只對一個變數 微分的方程式)加上一個初始條件。我們想知道的量是 ——一分鐘後的位置。注意這裡沒有隨機變數:水流地圖給定、起點給定,葉子的路徑是被決定的。這是這個 class 叫 deterministic 的原因;有亂流的河留給下一個 class。
一張地圖,一條路
想像水流地圖是一張畫滿短箭頭的紙,葉子是一支筆尖。筆尖落在某一點,就沿著那點的箭頭滑一小段,到了新位置再看新位置的箭頭,再滑一小段。把「一小段」縮到無限小,筆畫出來的線就是葉子的軌跡。
軌跡的切線應該等於當地的速度箭頭。但「每一點只有一支箭頭」還不足以保證解唯一,連續也不夠;我們需要限制相鄰位置的箭頭能差多少。
圖:軌跡的切線處處等於當地向量;Lipschitz 場中,同一起點只有一條路。
存在、唯一、不交叉
定義。 一個 vector field 是函數 。給定 ,ODE 初值問題是找一條可微曲線 滿足 且 。這樣的 叫這個初值問題的解,也叫從 出發的 trajectory(軌跡)。
定理(Picard–Lindelöf,只講結論)。 如果 對 是 continuous 的,並且對 是 Lipschitz 的——存在常數 使得對所有 都有 (相鄰兩點的箭頭差,不超過距離的 倍)——那麼對每個 ,解存在且唯一,至少在一小段時間內;若 的成長不超過線性,解可以延伸到整段 。
Lipschitz 的意思是:input 離得越近,output 也不會突然差太多。 Jacobian 有界的場滿足這個條件。把 ODE 改寫成 ,右邊就成了「由一條猜測曲線產生另一條曲線」的操作。在長度為 、且 的短區間上,兩條曲線的最大差距每次至多乘上 ,因此反覆操作會收斂到唯一的解。這是 Picard–Lindelöf 定理的證明思路 [1–3]。
推論(軌跡不交叉)。 設 、 都是同一個 ODE 的解。若存在某時刻 使 ,則 對所有 成立。
證明只要三行:把 當成新的起始時刻, 與 都是「從 出發」這個初值問題的解;唯一性說這樣的解只有一條;所以它們是同一條。(往前與往後都成立,因為把時間反向 之後 仍然 Lipschitz。)
「不交叉」指的是兩條不同的解不能在同一個 相遇後再分開。它們仍可能在不同時刻經過同一位置。對 autonomous 的場,這種相遇表示它們走的是同一條空間路線,只是時間進度不同;不能說兩個不同起點畫出的線一定沒有共同部分。
展開細節唯一性失效的例子:ẋ = x^(1/3),x(0) = 0
這個場在原點不是 Lipschitz 的:x^(1/3) 的斜率在 0 附近趨近無限大。結果從 x(0)=0 出發至少有兩條解:x(t) ≡ 0,以及 x(t) = (2t/3)^(3/2)。直接代入驗證第二條:d/dt (2t/3)^(3/2) = (3/2)(2t/3)^(1/2)·(2/3) = (2t/3)^(1/2) = x^(1/3)。事實上還有無限多條:先在 0 停留任意久、再開始沿第二條走,也都是解。這就是「同一個位置放兩片葉子卻漂去不同地方」的數學版本。
另一個常見的失效是「解在有限時間內跑到無限遠」:ẋ = x²,x(0)=x₀>0 的解是 x(t) = 1/(1/x₀ − t),在 t = 1/x₀ 時爆掉。這裡 Lipschitz 只在每個有界區域內成立(局部 Lipschitz),所以只保證短時間內的存在唯一。
直覺對了,但要說出條件
在存在唯一的條件下,起點與水流地圖會決定 。電腦算出的折線則只是近似;還要使用一致、穩定的 numerical method,才能在步長縮小時逼近這條解。
也要分清楚兩件事: 很大仍然可以保證唯一,只是相近起點的差距可能有較大的傳播上界;不滿足 Lipschitz 則是這個定理不能使用,並不自動表示解不唯一。下面的例子才具體展示了非唯一解。
動手放葉子
用電腦「順著箭頭走」最簡單的做法,就是把上面「滑一小段」的畫面直接寫成程式:每隔 秒看一次箭頭,往那個方向走 。
import numpy as np
def u(x, t): # 水流地圖:往右流,上下擺動
return np.array([1.0, 0.5*np.cos(x[0])])
def drift(x0, T=60.0, h=0.1):
x, t = np.array(x0, float), 0.0
while t < T - 1e-12:
x = x + h*u(x, t); t += h
return x
print(drift([0.0, 0.0])) # 應接近 (60, 0.5*sin 60)
這個場有 closed form 解 、(自己代入檢查:),所以可以對答案。 縮小十倍,數值解與 closed form 解的差距也大約縮小十倍——這個「差距怎麼隨 縮小」的規律,本 class 後面兩篇會精確算出來。
檢查理解
參考文獻
- Strogatz, S. H. Nonlinear Dynamics and Chaos: With Applications to Physics, Biology, Chemistry, and Engineering. Westview Press, 2nd ed., 2015.(第 2、6 章:一維與二維 vector field 的幾何直覺,存在唯一定理的結論式陳述。)
- Hirsch, M. W., Smale, S., Devaney, R. L. Differential Equations, Dynamical Systems, and an Introduction to Chaos. Academic Press, 3rd ed., 2013.(第 7 章:Picard–Lindelöf 的完整證明。)
- Hairer, E., Nørsett, S. P., Wanner, G. Solving Ordinary Differential Equations I: Nonstiff Problems. Springer, 2nd ed., 1993.(第 I 章:存在唯一定理與數值方法的共同起點。)