如何教你们不同的方程式
你不需要数学学位来理解ODE解析器. 你需要一个凸轮,一个屏幕,还有20分钟。 下面是Euler,RK4和适应方法的实际作用——用真实的代码.
以你能看到的东西开始
从弦悬一重. 拉到一边去 放开我 它挥动.
你刚刚创造了一个由微分方程控制的系统:
(单位:千美元) dω/dt = -(g/L) 犯罪(θ)
——是角度. {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}这是角速 g 是重力(9.81 m/s2). L是弦长度。 这两行说:角度变化的速度等于速度,速度变化的速度取决于重力,长度,以及目前的角度.
问题:我们无法完全解决这个方程式。 QQ使其非线性。 没有公式可以让你随时... 因此,我们大致——我们以小的增量前进,从目前的状态计算下一个状态.
这就是ODE解码器的功能. 还有更好和更糟的方法.
欧勒方法:明显但模糊
最简单的想法是:如果我现在知道州,我知道变化的速度,我可以估计州稍晚一点.
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
- 使用 k2 步中段, 再次测量 ~ k3
- 使用 k3 步入尾端, 再测量一次 ~ k4
- 组合:加权平均值(k1+2k2+2k3+k4)/6
这是第四顺序准确。 将步骤大小减半,错误减少16倍。 钢笔能为几千个秋千 正确节省能量.
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行代码.
为何这事关物理之外
顶礼是教例. 但同样的技术——前进,测量,正确——适用于任何有变化速度的地方:
- ** 人口增长**:dx/dt=rx(1-x/K)。 物流增长与承载能力. 同一解脱者.
- 化学反应:浓度以与当前浓度成比例的速度变化。 同一解脱者.
- ** 神经网络**:梯度下降是一个盘式ODE。 每个训练步骤都是沿着损失表面的欧拉步骤.
- ** 经济学**:通过dy/dt=r/y持续使用利息化合物。 指数增长是最简单的ODE.
- ** 动画计时**:缓冲曲线是弹簧-凹陷ODE的解决方案. CSS中的"弹性"和"弹跳"放松是物理模拟.
数学不变. 域则有. 这就是它成为一种语言的原因——同样的语法描述了羊的计数,笔鼓摇摆,以及神经网络训练.
试试你自己
打开PinePaper并选择动态系统生成器. 选择"pendulum". 波波摇摆. 现在更改参数 :
- 增加重力 − 更快的挥动(较短期间)
- 增加杆长 − 摇摆较慢(较长)
- 从更大的角度开始 – 注意时间的延长(教科书小角近似错失的非线性效果)
你所做的每个改变都是衡量的 您更改了参数并观察到了结果 。 RK4解析器每秒重算30帧,笔鼓向您展示了方程式的预测.
这才是重点 数学是测量。 PinePaper使其可见.
页面存档备份,存于互联网档案馆
参考资料
- Butcher, J.C. (2016) (英语). * 普通差异方程式的通用方法*(第3版)。 维利.
- Dormand, J.R. & Princess, P.J. (1980年) (英语). 一个嵌入式Runge-Kutta公式的家族. 计算和应用数学杂志,6(1),19-26.
- Euler, L. (1768) (英语). * Institutionum calculi inceptions *,第1卷. Impensis Academiae Imperialis Scientianarum. 中国科学出版社.
- Hairer, E., Nørsett, S.P., & Wanner, G.(1993年). * 第2版。 斯普林尔.
- Kutta, W. (1901) (英语). Betrag zur näherungsweisen 集成论总论 Difficialgleichungen. 中国植物物种信息数据库. *Zeitschrift für Mathematik und Physik *,46,435-453.
- 牛顿, I. (1687). * Philosophiæ Naturalis Principia Mathematica *. 维基语录链接:名人名言 - 文学作品 - 谚语 - 谚语 - 谚语 - 电影对白 - 主题 - 主题 - 主题 - 主题 - 主题 - 主题 伦敦:约瑟夫·斯特莱特.
- Runge, C. (1895) (英语). (原始内容存档于2018-09-22). über die numberische Auflösung von Difficialgleichungen. * 马瑟马提什·安纳伦*,46(2),167-178.
- (原始内容存档于2017-09-21). Stagence, S.H. (2015). * 非线性动态和乱象 * (第2版)。 西视出版社.
*PinePaper的ODE解码器覆盖约200行的欧拉,RK4,以及适应性的多尔曼德-王子RK45. 尝试在 [pinepaper.studio/editor] (/editor) 免费进行笔积模拟. *
Ready to create?
Start making animated GIFs, videos, and graphics — free, no signup.
Open PinePaper Editor