如何教你們不同的方程式
你不需要數學學位來理解ODE解析器 你需要一扇門,一扇屏幕,還有20分鐘 這是Euler, RK4, 以及適應方法的實際運作方式.
從你能看到的開始
挂于弦. 拉到一邊去 放手 旋轉.
你剛剛創造了一個以微分方程為主的系統:
dθ/dt = ω dω/dt = -(g/L) 犯罪(θ)
是角度 角速度 g 是重力(9.81 m/s2). L就是弦距 這兩行說: 角度以等速轉移, 速度以重力, 長度, 以及目前角度來轉移 .
問題是 我們不能完全解決這個方程式 QQ使它非線性。 沒有公式可以讓你隨時... 因此,我們相近的,我們以小增量進一步, 計算目前的下一個狀態.
解碼器就是這樣的 而且有更好和更糟的辦法.
歐拉方法: 明顯但閃亮
最簡單的想法是:如果我現在了解州, 我知道變化的速度, 我可以估計州稍晚一點.
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年,卡爾·倫吉和馬丁·庫塔出版了更好的方法. 而不是每一步一次的變化率
- 度量步首的斜度 − k1
- 使用 k1 分半步
- 半步使用 k2, 量度 ~ k3
- 用 k3 步入尾端, 再度量一次 ~ k4
- 混合:加权平均 (k1 + 2k2 + 2k3 + k4) / 6
這是第四順序的 將步數减半,錯誤降為16倍。 The能正确保存能量 千秋千.
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讓它看得見.
」
參考
- 屠夫, J. C. (2016). * 普通不同方程式的通用方法*(第3版)。 威利.
- Dormand, J.R. & Prince, P.J.(1980年)。 嵌入式Runge-Kutta公式的家族. * 计算和应用數學期刊*,6(1),19-26.
- Euler, L. (1768). * 中央研究院*,第一卷.
- 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.
- 牛頓, I. (1687). * 理工科。 約瑟夫史崔特.
- Runge, C. (1895). 烏貝爾死於數字 奧弗勒星 von Difficialgleichungen。 * Mathematische Annalen *,46(2),167-178.
- 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