搜尋課程與筆記

搜尋筆記

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

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

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

    M0.1 閘門的進出:Divergence 與通量

    本篇重用1 篇

    看不見站內

    你負責一座捷運站的人流。站內沒有攝影機,你手上只有每個閘門的計數器:每分鐘各有多少人刷卡進、多少人刷卡出。四個閘門的讀數擺在你面前。

    問題:現在站內的人是在變多還是變少?每分鐘變多少?

    最直接的方法是把所有「進」加起來,再減掉所有「出」。但這個方法有一個前提:我們得把能進出的地方都算到。若列車帶走的人沒有被記錄,只看閘門就可能判斷錯。

    那麼,怎麼把「穿過邊界的量」寫下來,再把它縮到一個小區域,判斷局部的增減?

    課堂提問Q1

    把情境翻成數學:這裡的「區域」是什麼?「邊界」是什麼?我們手上量到的是哪種量?我們想知道的又是哪種量?

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

    最直覺的答案會直接跳到「進減出」,跳過了三個該說清楚的物件。

    區域 Ω\Omega:站內的範圍,一個平面上的區域。我們想知道的是它裡面的總量 N(t)N(t)——站內人數隨時間的變化率 dN/dtdN/dt。

    邊界 ∂Ω\partial\Omega:站內與站外的分界線。閘門是邊界上開了口的幾段;其餘的邊界是牆,沒有人穿過。

    量到的東西:每個閘門的計數器給的是「每分鐘穿過這一段邊界的淨人數」——一個穿過邊界的流量,方向有正負(出為正、進為負,或反過來,先講好)。

    於是問題變成:知道邊界上每一段的穿越流量,能不能推出內部總量的變化率? 翻譯到這裡就看到了關鍵:這需要一個把「邊界上的穿越」與「內部的增減」連起來的定律。連起來的橋是守恆——人不會在站內憑空出現或消失。這一句話就是整個算法的地基。

    一個灑水器和一個排水口

    先看一張箭頭圖。不過,我們要計算的是人數,不只是速度:同樣走得很快的地方,人多與人少時,每秒通過的量不同。以下把「密度乘上速度」記成流量場 j=ρvj=\rho v,其中 ρ\rho 是人數密度、vv 是速度;箭頭的長度表示通過的量,而不只是走多快。

    在灑水器四周,箭頭一律向外指:任何一個圈住灑水器的小圈,流出去的比流進來的多——這裡是一個源。在排水口四周,箭頭一律向內:圈住它的任何小圈都是淨流入——這裡是一個匯。在一條平直的走廊裡,箭頭全部同向、等長:一個小圈左邊進多少、右邊就出多少,淨流量是零。

    「圈一個小圈,數淨流出多少」這個動作,對平面上每一點都可以做。做出來的數字有正有負:正的地方在「吐出」、負的地方在「吸入」、零的地方只是「經過」。這個逐點的數字就是 divergence。

    源、匯、穿流三種向量場,以及各自小圈的淨流出。

    圖:紅色 source 的 divergence 為正;藍色 sink 的 divergence 為負;均勻穿流為零。

    把小圈寫成數學

    流量場與 flux。 在二維裡,ρ\rho 的單位是人數/面積,vv 是距離/時間,因此 j=ρvj=\rho v 是人數/長度/時間。邊界的一小段長 dsds,向外的單位法向量是 nn,每單位時間淨流出的人數就是 j⋅n dsj\cdot n\,ds:只有垂直於邊界的分量會穿過。整條邊界加起來:

    Φ(Ω)=∮∂Ωj⋅n ds,\Phi(\Omega)=\oint_{\partial\Omega}j\cdot n\,ds ,

    叫 Ω\Omega 的 flux(通量)——向外為正。守恆這句話寫成式子就是

    dNdt=− Φ(Ω):\frac{dN}{dt}=-\,\Phi(\Omega):

    裡面的總量增加多少,就是邊界上淨流進多少。這一行沒有任何近似,但它有一個前提:NN 的變化只能來自穿過邊界,內部沒有源與匯。

    Divergence。 把區域縮成以 (x,y)(x,y) 為中心的小長方形。先只算水平方向:右邊的向右流量減去左邊的向右流量,是

    [jx ⁣(x+Δx2,y)−jx ⁣(x−Δx2,y)]Δy.\left[j_x\!\left(x+\frac{\Delta x}{2},y\right) -j_x\!\left(x-\frac{\Delta x}{2},y\right)\right]\Delta y.

    除以面積 ΔxΔy\Delta x\Delta y,括號裡就是對 xx 的差商。上下兩邊同樣得到對 yy 的差商;兩個方向加起來,再取極限:

    ∇ ⁣⋅j  =  ∂jx∂x+∂jy∂y  =  lim⁡∣Ω∣→0Φ(Ω)∣Ω∣.\nabla\!\cdot j\;=\;\frac{\partial j_x}{\partial x}+\frac{\partial j_y}{\partial y} \;=\;\lim_{|\Omega|\to0}\frac{\Phi(\Omega)}{|\Omega|}.

    Divergence 把每一個方向的淨流出變化率加總起來。 對 jj 做 divergence,得到每單位面積的人數淨流出;對 vv 做 divergence,則描述速度場的局部擴張。算站內密度變化時,我們需要前者。

    Gauss 定理(二維)。 把 Ω\Omega 切成很多小格子。每個小格子的 flux 約是 (∇⋅j)×(\nabla\cdot j)\times面積。把所有格子加起來時,每一條內部格線被相鄰兩格各算一次、方向相反,剛好抵消,只剩最外圈的邊界。所以

    ∮∂Ωj⋅n ds  =  ∫Ω∇ ⁣⋅j  dA.\oint_{\partial\Omega}j\cdot n\,ds\;=\;\int_\Omega\nabla\!\cdot j\;dA .

    對足夠平滑的流量場與邊界,左邊只看邊界、右邊逐點算內部,得到相同的量。這就是「內部格線抵消」的連續版本。

    展開細節抵消為什麼是精確的、而不是近似(離散版本一行就看得出來)

    在格網上,每條內部邊界的同一個流量 FF,對一格是流出 +F+F,對鄰格就是流入 −F-F。全部格子相加,內部項抵消,只剩外側邊界。這個離散抵消是精確的;在足夠平滑的條件下,取極限得到每格淨流出由 (∇⋅j)ΔxΔy(\nabla\cdot j)\Delta x\Delta y 描述的連續版本。

    直覺對了,但要說出它靠什麼

    結論。 「進減出」正確,因為它就是 dN/dt=−Φ(Ω)dN/dt=-\Phi(\Omega):站內人數的變化率等於邊界上的淨流入。這一行是恆等式,不是估計。

    它依賴兩個假設。 第一,守恆:人不會在站內出現或消失——這在捷運站幾乎一定成立。第二,閘門就是全部的邊界:所有能穿過 ∂Ω\partial\Omega 的地方都有計數器。這一條才是會出事的地方。站務員的員工門、緊急出口、還有月台邊的列車門——列車到站,一車人進了站內;列車開走,一車人離開。如果你的 Ω\Omega 是「整座站含月台」,列車門就是邊界的一部分,而閘門計數器沒有算它。「每分鐘淨進 40 人,月台卻空了」正是這種情形:40 人從閘門進來,一列車載走了更多人,而那條邊界你沒量。

    Divergence 多給了什麼。 閘門版只回答整站的增減;知道各處的 density 與 velocity 後,∇⋅j=∇⋅(ρv)\nabla\cdot j=\nabla\cdot(\rho v) 才能逐點判斷密度如何變化。在沒有內部來源時,淨流出為正,這裡的密度就下降。Gauss 定理讓局部計算與邊界計數對照;對不上時,需要檢查漏算的通道、量測誤差或模型假設,不一定只有一種原因。

    實際算一次

    十行程式就能看到「內部相加=邊界」是精確的,以及暗門造成的差額:

    import numpy as np
    n = 40; rho = np.full((n, n), 5.0)                 # 每格人數
    Fx = 0.3 + 0.1*np.random.randn(n, n+1)             # 垂直格線上的向右流量
    Fy = 0.1*np.random.randn(n+1, n)                   # 水平格線上的向下流量
    inside = (slice(10, 30), slice(10, 30))            # 站內範圍 Ω
    for leak in (0.0, 0.5):                            # 0.5 = 暗門每步帶走的人
        N0 = rho[inside].sum()
        div = (Fx[:, 1:] - Fx[:, :-1]) + (Fy[1:, :] - Fy[:-1, :])   # 每格淨流出
        rho_new = rho - div; rho_new[20, 20] -= leak
        flux_out = Fx[10:30, 30].sum() - Fx[10:30, 10].sum() + Fy[30, 10:30].sum() - Fy[10, 10:30].sum()
        print(f"實際變化 {rho_new[inside].sum()-N0:+.3f}   閘門推算 {-flux_out:+.3f}")

    第一行兩個數字完全相同;第二行差 0.50.5——正是暗門的量。

    檢查理解

    想一想

    你知道夜市各處的人數密度 ρ\rho 與速度 vv。沒有內部來源時,要判斷哪裡正在越來越擠,該看哪個量?

    想一想

    某座站的閘門計數器每分鐘顯示淨進 30 人,站務員卻回報人數持平。最可能的解釋是:

    想一想

    若一個平滑流量場在某區域內處處 ∇⋅j=0\nabla\cdot j=0,可以推出:

    參考文獻

    1. Strang, G. Calculus. Wellesley-Cambridge Press;MIT OpenCourseWare RES.18-001 免費全文。(Green / divergence theorem 的章節。)
    2. Feynman, R. P., Leighton, R. B., Sands, M. The Feynman Lectures on Physics, Vol. II, Ch. 3: Vector Integral Calculus.(用「小方塊的 flux」定義 divergence、以及 Gauss 定理的拼接論證。)
    3. Marsden, J. E., Tromba, A. J. Vector Calculus. W. H. Freeman.(二維與三維 divergence theorem 的正式敘述與證明。)