· 3 min read

如何教你們不同的方程式

你不需要數學學位來理解ODE解析器. 你需要一扇門,一扇屏幕,還有20分鐘. Euler, RK4, 以及適應方法的實際運作方式 真正的密碼.

從你能看到的開始

挂于弦. 拉到一邊去. 放手. 旋轉.

你剛剛創造了一個以微分方程為主的系統:

dθ/dt = ω dω/dt = -(g/L) 犯罪(θ)

是角度. 角速度. g 是重力(9.81 m/s2). L就是弦距. 這兩行說: 角度以等速轉移, 速度以重力, 長度, 以及目前角度來轉移 .

問題是 我們不能完全解決這個方程式. sin(θ)使它非線性. 沒有公式可以讓你隨時... 所以我們大概.. 我們以小增量進一步 計算下一個狀態.

解碼器就是這樣的. 而且有更好和更糟的辦法.

歐拉方法: 明顯但閃亮

最簡單的想法是:如果我現在了解州, 我知道變化的速度, 我可以估計州稍晚一點.

next_angle = current_angle + velocity × dt
next_velocity = current_velocity + acceleration × dt

這是歐拉的方法. 就像在大雾中行走:你可以看到前面的一步,所以你走那一步,然后再看一遍. 代碼 :

function euler(f, t, y, dt) {
  const dy = f(t, y);
  return [
    y[0] + dt * dy[0],
    y[1] + dt * dy[1]
  ];
}

問題:歐拉的方法是一級精准的. 也就是說如果你把步數降低一半 就會把錯誤降低一半. 對於一個倒數,這個錯誤會累积.. 模擬的倒數慢慢地增加能量. 幾分鐘后,它旋轉成圓形. 真正的小人物從來不會這麼做的.

RK4:工作馬

1901年,卡爾·倫吉和馬丁·庫塔出版了更好的方法. 而不是每一步一次的變化率

  1. 度量步首的斜度 − k1
  2. 使用 k1 分半步
  3. 半步使用 k2, 量度 ~ k3
  4. 用 k3 步入尾端, 再度量一次 ~ k4
  5. 混合:加权平均 (k1 + 2k2 + 2k3 + k4) / 6

這是第四順序的. 將步數减半,錯誤降為16倍. The能正确保存數以千計的能量.

這個聲明值得查而不是相信. 下面,两种方法 將 y′ = y 從 0 整合到 1 - 其中的答案是 *e * - 四步 大小. 把步數減低 歐拉的錯誤除以2, RK4的錯誤除以16, 也就是一等和四等的意思.

Interactive demo — open in editor pp:PinePaper

function rk4(f, t, y, dt) {
  const k1 = f(t, y);
  const k2 = f(t + dt/2, [y[0] + dt/2 * k1[0], y[1] + dt/2 * k1[1]]);
  const k3 = f(t + dt/2, [y[0] + dt/2 * k2[0], y[1] + dt/2 * k2[1]]);
  const k4 = f(t + dt,   [y[0] + dt   * k3[0], y[1] + dt   * k3[1]]);
  return [
    y[0] + (dt/6) * (k1[0] + 2*k2[0] + 2*k3[0] + k4[0]),
    y[1] + (dt/6) * (k1[1] + 2*k2[1] + 2*k3[1] + k4[1])
  ];
}

這是 PinePaper 用于彈簧、彈簧和范德波爾模擬的方法. 和航空航天軌道計算中一樣. 22行碼.

為什麼這關鍵於物理之外

The是教例. 但同樣的技術.. 向前一步 量度 正确 任何您有變更率的地方 :

  • 人口增長:dx/dt=r/x(1-x/K). 具有承载能力的后勤增长. 同一解者.
  • 化学反应:浓度以与当前浓度成比例的速度变化. 同一解者.
  • 神经網路:梯度下降是磁碟化的ODE. 每一步的訓練都是歐拉沿損失表面的一步.
  • 經濟學:利息化合物通过 dy/dt = r/y 持續存在. 指示增长是最簡單的ODE.
  • 動畫時間: 放松曲線是泉水掩體的解答. CSS中的"弹性"和"彈跳"鬆懈是物理仿真.

數學沒變. 域有. 所以才會成為語言.. 同樣的語法描述羊的數量,筆頭搖擺,以及神经網路訓練.

你自己試吧

開啟 PinePaper 并選擇动态系統產生器 . 選擇"pendulum"。 搖擺. 現在變更參數 :

  • 增加重力 − 更快的波动(短期)
  • 增加棒長 → 旋轉速度更慢( 周期更長 )
  • 從更大的角度開始 – 觀察期間的增長( 非線性效果, 教科书小角近似錯過)

你所做的每一次改變都是一個量度. 你改變了參數 觀察了結果. RK4 解析器重計每秒30帧.

這才是重點. 數學是衡量的. PinePaper讓它看得見.

Interactive demo — open in editor pp:PinePaper

參考

  • 屠夫 J. C. (2016年). * 普通不同方程式的通用方法*(第3版). 威利.
  • Dormand, J. R. 王子, P. J. (1980年). 嵌入式Runge-Kutta公式的家族. * 计算和应用數學期刊*,6(1),19-26.
  • (原始内容存档于2018-10-03). Euler, L. (1768). A/C.5/49/70,附件. 1. 帝国科學院.
  • Hairer, E., Nørsett, S.P., & Wanner, G. (1993). * 第2版. 斯普林格.
  • Kutta, W. (1901). 比特拉格 zur näherungsweisen 集成 總和 difficialgleichungen. Zeitschrift für Mathematik und Physik,46,435-453.
  • 牛頓,我. (1687). * 理工科. 約瑟夫史崔特.
  • 朗格, C. (1895). 烏貝爾死於數字 奧弗勒星 von Difficialgleichungen. * Mathematische Annalen *,46(2),167-178.
  • (原始内容存档于2018-03-21). Stagez, S.H. (2015年). * 非線性动态與混亂* (第2版). 西景出版社.

PinePaper的ODE解析器包括Euler,RK4,以及約200行的适应性Dormand-Prince RK45. 試著在 [pinepaper. studio/ editor] (/editor) 自由實驗.

Ready to create?

Start making animated GIFs, videos, and graphics — free, no signup.

Open PinePaper Editor