搜尋課程與筆記

搜尋筆記

輸入主題、關鍵字或單元編號,例如 Flow Matching、U4。

    按 Esc 關閉 · ⌘ / Ctrl K 開啟搜尋

    M3.1 10 分鐘閱讀 2026年10月

    M3.1 水流加亂流:SDE 是加了噪聲的 ODE

    本篇重用2 篇

    同一條河,多了亂流

    回到 M2.0 的那條河,但這次看得更仔細。水面有一個穩定的主流,每秒把東西往下游帶 0.5 公尺;水面也有亂流——無數細小的渦旋,每一瞬間隨機地把葉子往左或往右推一點,推的方向與前一瞬間無關。

    你在橋下放一片葉子。一分鐘後它在哪?

    主流會把葉子帶往下游,隨機擾動卻讓相同起點的葉子走出不同的路。要怎麼把這兩種移動放進同一條規則? 上一篇的 random walk 已經給了噪聲的尺度:時間 hh 內的增量是 h\sqrt h 大小;主流的位移則是 hh 大小。

    課堂提問Q1

    翻成數學。「主流」與「亂流」各是什麼物件?「一分鐘後的位置」是什麼——一個數、還是一個分佈?把 ODE x˙=f(x,t)\dot x=f(x,t) 改成含亂流的版本,該怎麼寫?

    先想一想,再展開看整理後的答案

    課堂上通常先寫 x˙=f(x,t)+噪聲\dot x=f(x,t)+\text{噪聲},然後卡在「噪聲怎麼寫」。上一篇已經告訴我們答案:Brownian motion 沒有速度(h/h→∞\sqrt h/h\to\infty),所以不能寫成 x˙\dot x 的形式,只能寫增量。

    先把 ODE 改寫成增量:在一小段時間 hh 內,x(t+h)−x(t)≈f(x,t) hx(t+h)-x(t)\approx f(x,t)\,h。亂流在這段時間內的推力是 Brownian motion 的增量 Wt+h−Wt∼N(0,h)W_{t+h}-W_t\sim\mathcal N(0,h),乘上一個強度 gg。合起來:

    x(t+h)−x(t)  ≈  f(x,t) h  +  g(t) (Wt+h−Wt).x(t+h)-x(t)\;\approx\;f(x,t)\,h\;+\;g(t)\,\big(W_{t+h}-W_t\big).

    把 h→0h\to0 的這個關係記成

    dxt=f(xt,t) dt+g(t) dWt.dx_t=f(x_t,t)\,dt+g(t)\,dW_t .

    這叫 SDE(stochastic differential equation)。ff 是 drift,gg 是 diffusion coefficient。它的解是一個隨時間變動的 random process;每次給定 Brownian noise 的 realization,就得到一條 random trajectory。x60x_{60} 則是其中一個時刻的隨機變數,它的 distribution 不是整條 process 本身。

    一條路變成一把扇子

    對固定主流 f=cf=c、固定強度 gg,一百條路會像扇子散開:中心是 x0+ctx_0+ct,標準差是 gtg\sqrt t。這個特例很適合先理解兩項的角色,但一般 drift 會影響散開程度;例如往中央拉回的 drift,可以讓 variance 不再持續增加。

    一般情況不能把解直接拆成「ODE 解加 Brownian motion」。因為隨機偏移後,葉子讀到的 drift 也會改變;ddtE[xt]=E[f(xt,t)]\frac{d}{dt}\mathbb E[x_t]=\mathbb E[f(x_t,t)],通常不等於 f(E[xt],t)f(\mathbb E[x_t],t)。

    一條路變成一把扇子

    圖:固定 drift 與固定 diffusion 的特例,中心平移、標準差按 gtg\sqrt t 增加。

    讀法、模擬、以及為什麼是 h\sqrt h

    先用一小步理解。 假設係數滿足適當的存在、唯一與收斂條件,SDE 在小步長下可以近似為

    xt+h≈xt+f(xt,t) h+g(t)h εt,εt∼N(0,I) 彼此 independent.x_{t+h}\approx x_t+f(x_t,t)\,h+g(t)\sqrt h\,\varepsilon_t,\qquad \varepsilon_t\sim\mathcal N(0,I)\ \text{彼此 independent}.

    這是 Euler–Maruyama approximation,不是有限步的精確等式。嚴格的 Itô SDE 由積分定義:xt=x0+∫0tf(xs,s) ds+∫0tg(s) dWsx_t=x_0+\int_0^t f(x_s,s)\,ds+\int_0^t g(s)\,dW_s [1, 3]。本篇先用增量理解這個式子,收斂的條件留到本單元最後。

    Euler–Maruyama 法。 把讀法直接寫成迴圈:

    xn+1=xn+h f(xn,tn)+g(tn)h εn.x_{n+1}=x_n+h\,f(x_n,t_n)+g(t_n)\sqrt h\,\varepsilon_n .

    它是 M2.3 的 Euler 法加一項噪聲;g≡0g\equiv0 時就退回 Euler。

    為什麼是 h\sqrt h。 三行檢查。走到 TT 需要 N=T/hN=T/h 步,噪聲項的總和是 ∑ngh εn\sum_n g\sqrt h\,\varepsilon_n,independent Gaussian 相加、variance 相加(M1.0):

    Var(∑n=0N−1gh εn)=N g2h=g2T.\mathrm{Var}\Big(\sum_{n=0}^{N-1}g\sqrt h\,\varepsilon_n\Big)=N\,g^2h=g^2T .

    與 hh 無關——把步長切細,亂流的總效果不變,這是模擬應有的性質。若寫成 g h εng\,h\,\varepsilon_n,總 variance 是 g2hT→0g^2hT\to0,步長越細亂流越小,模擬結果會隨你選的 hh 改變——這不是一個合法的模型。□\square

    一個能對答案的例子。 f≡cf\equiv c(等速主流)、gg 常數:把讀法從 00 加到 TT,xT=x0+cT+g∑hεnx_T=x_0+cT+g\sum\sqrt h\varepsilon_n,後面那個和是 N(0,g2T)\mathcal N(0,g^2T),所以

    xT∼N(x0+cT,  g2T).x_T\sim\mathcal N\big(x_0+cT,\;g^2T\big).

    c=0.5c=0.5、g=0.3g=0.3、T=60T=60:均值 30 公尺、標準差 0.360≈2.30.3\sqrt{60}\approx2.3 公尺。這就是「晃一點」的大小。

    展開細節這門課不用 Itô 積分,代價是什麼

    上面的讀法有一個隱藏的選擇:噪聲強度 g 在每一步用的是步「起點」的值。當 g 只依賴 t,起點、中點或終點的 g 在 h → 0 時沒有差別。當 g 依賴 x(例如亂流在河中央比岸邊強),差別就出現了:用起點的 g(xₙ) 對應 Itô 的定義,用中點對應 Stratonovich 的定義,兩者的極限是不同的過程,差一個 ½ g ∂ₓg 的 drift。這門課只處理 g = g(t) 的情形,所以不需要區分;遇到 g(x) 時要另外學 Itô 引理 [1, 3]。另一個代價是我們沒有證明「h → 0 時分佈收斂」——這是本 class 最後一篇(M3.4)與 [4] 的內容。

    直覺的骨架對了,數字補上了

    起點問題的答案:一分鐘後葉子在下游約 30 公尺處,左右偏差的標準差約 2.3 公尺——95% 的葉子落在 30±4.630\pm4.6 公尺內。直覺的「晃一點」沒錯,但它說不出 2.3 這個數字從哪來:來自 gTg\sqrt T,也就是 M3.0 的 t\sqrt t 規律。

    這個判斷依賴的假設:亂流的推力是 Brownian 增量——每一瞬間 independent、Gaussian、variance 與時間成正比。以及 gg 不依賴位置。真實的河兩者都不完全成立:渦旋有大小,推力在一個渦旋的時間尺度內是相關的(那會像上一篇的 ρ>0\rho>0,把有效的 gg 放大);河中央的亂流比岸邊強(gg 依賴 xx,進入展開框裡說的 Itô 領域)。理論告訴你這兩件事會往哪個方向偏;偏多少,要靠實作。

    模擬一次,再用錯誤的尺度模擬一次

    import numpy as np
    rng = np.random.default_rng(0)
    def em(f, g, x0, T, h, trials=20000, noise_scale='sqrt'):
        x = np.full(trials, x0); N = int(round(T/h))
        for n in range(N):
            eps = rng.standard_normal(trials)
            step = np.sqrt(h) if noise_scale == 'sqrt' else h      # 正確 vs 錯誤的尺度
            x = x + h*f(x) + g*step*eps
        return x
    for h in [1.0, 0.1, 0.01]:
        ok  = em(lambda x: 0.5, 0.3, 0.0, 60.0, h)
        bad = em(lambda x: 0.5, 0.3, 0.0, 60.0, h, noise_scale='h')
        print(h, round(ok.mean(),2), round(ok.std(),2), '| h-scaled std:', round(bad.std(),3))
    # 均值 30.0、標準差 2.32,與 h 無關;用 h 當尺度時標準差 2.3 → 0.73 → 0.23,隨 h 消失

    用 h\sqrt h 的結果與本例的 Gaussian 理論相符;改用 hh,累積變異數則隨步長縮小而消失。若改成 stationary AR(1) 擾動、固定 0<ρ<10<\rho<1,離散增量就不是 independent Brownian increments。在適當極限下,它仍可能得到 Brownian 模型,但有效變異數會多出 (1+ρ)/(1−ρ)(1+\rho)/(1-\rho) 的因子,不能原封不動沿用原來的 gg;若相關時間本身也隨 h 改變,更需重新分析。

    檢查理解

    想一想

    假設一個量有固定下降速度 c>0c>0,又受到 Brownian 擾動,想在這個理想模型下描述時間 TT 後的 distribution。該用哪個工具?

    想一想

    同事的 Euler–Maruyama 程式把噪聲寫成 x += h*f(x) + g*h*eps。他發現把 hh 從 0.1 改成 0.01 之後,模擬出的分佈變窄了很多。正確的診斷是:

    想一想

    SDE dx=f dt+g dWdx=f\,dt+g\,dW 裡,若 gg 依賴位置 xx(河中央亂流較強),本篇的讀法「每步用起點的 g(xn)g(x_n)」:

    參考文獻

    1. Särkkä, S., Solin, A. Applied Stochastic Differential Equations. Cambridge University Press, 2019.(第 2–4 章:SDE 的直覺讀法、Itô 與 Stratonovich 的差別、Euler–Maruyama。)
    2. Higham, D. J. An Algorithmic Introduction to Numerical Simulation of Stochastic Differential Equations. SIAM Review 43(3), 2001.(用十幾行 MATLAB 建立 Brownian motion 與 Euler–Maruyama 的教學經典。)
    3. Øksendal, B. Stochastic Differential Equations: An Introduction with Applications. Springer, 6th ed., 2003.(第 3–5 章:Itô 積分與 SDE 的嚴格定義——本課程刻意略過的部分。)
    4. Kloeden, P. E., Platen, E. Numerical Solution of Stochastic Differential Equations. Springer, 1992.(第 9–10 章:Euler–Maruyama 的收斂性。)