← 學習地圖

數學建模學習工坊 / 06

擴散模型:平滑圖像的數值陷阱

空間解像度與邊界如何改變擴散?

約 150 分鐘合成教學實驗v1.0.0正在讀取本機草稿…
學習目標與先備條件

導數、ODE 時間步進與線性系統。

  • 由通量平衡推導擴散。
  • 把數值穩定比值連到步長及網格大小。
  • 使用符合邊界的總量檢查與網格收斂。

01 / 08 · 10 分鐘

觀察情境

一米長區域包含合成濃度場。固定零端點時用 sin(πx),週期邊界時用 1+0.5 cos(2πx)。兩種模態都有已知時間演化,可在處理實測空間資料前用作核證。

輪到你

畫出兩種初始場,解釋兩種邊界如何交換或保存總物質。

02 / 08 · 10 分鐘

提出問題

分開物理問題『場擴散多快』與數值問題『網格有多接近 PDE』。加密網格改變解像度,不改變物理擴散率;只看動畫無法分辨兩者。

輪到你

選網格前先定義誤差範數與比較時間。

03 / 08 · 15 分鐘

假設與變數

假設一維、擴散率固定、沒有源項,並指定邊界。Fick 通量為 J=−D ux;把局部累積積分到格子,得到流入減流出平衡。固定端點容許流失,週期邊界則必須守恆總量。

輪到你

記錄 D 的單位,指出各邊界適用哪種總量檢查。

04 / 08 · 20 分鐘

建立模型

結合 ut=−Jx 與 Fick 定律得 ut=Duxx,以中心二階差分近似 uxx。固定端點的更新導數設為零,因為數值已指定;週期差分跨邊相接,而且不重複最後網格節點。

ut=Duxx,ujn+1=ujn+λ(uj+1n2ujn+uj1n),λ=DΔt/Δx2u_t=D u_{xx},\qquad u_j^{n+1}=u_j^n+\lambda(u_{j+1}^n-2u_j^n+u_{j-1}^n),\quad \lambda=D\Delta t/\Delta x^2
輪到你

以 u=[0,1,4,9,0]、dx=0.1 手算差分模板,比較兩種邊界。

05 / 08 · 15 分鐘

設計算法

此一維中心擴散格式的 Forward Euler 需要 λ≤1/2;dx 減半就約要把 dt 除以四。Backward Euler 解線性系統,免除此穩定限制,但仍有時間離散誤差;穩定不等於準確。

輪到你

推導 Fourier 模態的放大倍率,預測最危險的波長。

06 / 08 · 25 分鐘

Python 實驗

完成 student_model 的空間算子。框架用整數步恰好到達指定終點,因此有效 λ 可能略低於輸入比值。比較你的顯式曲線、精確模態及 Backward Euler。

輪到你

以 λ=0.4 執行 20 及 40 格,再改週期邊界,記錄誤差與總量。

07 / 08 · 25 分鐘

驗證與修訂

把 λ 增至 1/2 以上。平滑低頻初始模態可能暫時看似合理,因不穩定高頻分量最初接近捨入誤差;穩定性檢查應在圖像劇變前已失敗。較長運行或擾動模態可揭露不穩定。

輪到你

解釋為何好看的結果不能推翻穩定條件失敗;區分邊界流失與數值洩漏。

08 / 08 · 15 分鐘

撰寫結論

報告 PDE、邊界、初始場、網格、有效步長與誤差。單一精確模態的收斂只核證有限條件;反應擴散延伸需要新增非負性與平衡檢查,不能直接借用純擴散結論。

輪到你

寫出收斂表,提出一個反應項及其極限情況測試。

需要一點提示?

1. 概念提示

內部節點用 u[j+1]−2u[j]+u[j−1],分母是 dx²。

2. 數學/算法提示

週期鄰居用 np.roll;固定邊界只更新 1:-1。

3. 參考實作導引

長時間模擬前,先在手算網格追蹤參照差分模板。

先比較推理,再選擇是否套用。套用前會另存你目前的程式。

實驗協定:比較、失效與延伸

指定比較

固定 λ 比較 20 與 40 格,以精確模態比較顯式及 Backward Euler。

失效實驗

設 λ=1.0;即使低頻曲線暫時平滑,穩定條件仍失敗。

研究延伸

加入反應項,探索圖案形成前先測試均勻平衡點。

PYTHON WORKBENCH

先預測,再執行。

實驗參數與種子

可直接修改以上程式,或開啟語法標示編輯器。起始碼的待完成部分會令相關檢查失敗;請依推導修正 student_model。

按啟動才下載運算環境;每次實驗使用獨立命名空間,最多 30 秒。

無法載入?仍可下載獨立 notebook,在安裝 NumPy、SciPy、Matplotlib 的 Python 環境執行。 參考 notebook

把這一課連回你的書架。

確認草稿變更

基準與我的運行

基準由指定合成資料生成;右方只展示你最後完成的運行。