· 4 min read

如何教你们不同的方程式

你不需要数学学位来理解ODE解析器. 你需要一个凸轮,一个屏幕,还有20分钟. 以下是Euler, RK4 和适应方法的实际作用—— 与真实的代码.

以你能看到的东西开始

从弦悬一重. 拉到一边去. 放开我. 它挥动.

你刚刚创造了一个由微分方程控制的系统:

(单位:千美元) dω/dt = -(g/L) 犯罪(θ)

——是角度. {\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}这是角速. g 是重力(9.81 m/s2). L是弦长度. 这两行说:角度变化的速度等于速度,速度变化的速度取决于重力,长度,以及目前的角度.

问题:我们无法完全解决这个方程式. sin(θ)使其非线性. 没有公式可以让你随时... 所以我们大概.. 我们以小的增量前进, 计算下一个状态 从目前的.

这就是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年,卡尔·伦格和马丁·库塔发表了更好的方法. 与其每步看一次变化率,不如看四次:

  1. 测量步骤开始时的坡度 − k1
  2. 使用 k1 分步 , 测量那里的坡度 ~ k2
  3. 使用 k2 步中段, 再次测量 ~ k3
  4. 使用 k3 步入尾端, 再测量一次 ~ k4
  5. 组合:加权平均值(k1+2k2+2k3+k4)/6

这是第四顺序准确. 将步骤大小减半,错误减少16倍. 钢笔能为几千个秋千 正确节省能量.

这种说法值得检查而不是相信. 以下两种方法 将 y′ = y 从 0 整合到 1 - 确切的答案是 *e * - 4个步骤 尺寸. 将台阶减半将欧拉的误差除以约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行代码.

为何这事关物理之外

顶礼是教例. 但同样的技术.. 前进,衡量,正确.. 在有变化率的地方申请:

  • 人口增长:dx/dt=rx(1-x/K). 物流增长与承载能力. 同一解脱者.
  • 化学反应:浓度以与当前浓度成比例的速度变化. 同一解脱者.
  • 神经网络:梯度下降是一个盘式ODE. 每个训练步骤都是沿着损失表面的欧拉步骤.
  • 经济学:通过dy/dt=r/y持续使用利息化合物. 指数增长是最简单的ODE.
  • 动画计时:缓冲曲线是弹簧-凹陷ODE的解决方案. CSS中的"弹性"和"弹跳"放松是物理模拟.

数学不变. 域则有. 这就是它成为语言的原因—— 同一个语法描述了羊的计数,笔鼓摇摆,和神经网络训练.

试试你自己

打开PinePaper并选择动态系统生成器. 选择"pendulum". 波波摇摆. 现在更改参数 :

  • 增加重力 − 更快的挥动(较短期间)
  • 增加杆长 − 摇摆较慢(较长)
  • 从更大的角度开始 – 注意时间的延长(教科书小角近似错失的非线性效果)

你所做的每个改变都是衡量的. 您更改了参数并观察到了结果 . RK4解析器每秒重算30帧,笔鼓向您展示了方程式的预测.

这才是重点. 数学是测量. PinePaper使其可见.

Interactive demo — open in editor pp:PinePaper

参考资料

  • 屠夫, J.C. (编). (2016) (英语). * 普通差异方程式的通用方法*(第3版). 维利.
  • 多尔曼德, J. R. Prince, P.J. (美国英语). 1980 (英语). 一个嵌入式Runge-Kutta公式的家族. 计算和应用数学杂志,6(1),19-26.
  • 维基月球在线解说-欧拉环形山 Andersson, L. (1768) (英语). * 《研究所》,第一卷. 一、导 言. Impensis Academiae Imperialis Scientiarum. 中国植物物种信息数据库.
  • Hairer, E., Nørsett, S.P., & Wanner, G., 互联网档案馆的存檔,存档日期2014-03-02. (1993) (英语). * 第2版. 斯普林尔.
  • 维基月球在线解说-库塔环形山. Kutta, W. 1901 (英语). Betrag zur näherungsweisen 集成论总论 Difficialgleichungen. 中国植物物种信息数据库. *Zeitschrift für Mathematik und Physik *,46,435-453.
  • (原始内容存档于2018-09-21). Newton, I. (1687) (英语). * Philosophiæ Naturalis Principia Mathematica *. 维基语录链接:名人名言 - 文学作品 - 谚语 - 谚语 - 谚语 - 电影对白 - 主题 - 主题 - 主题 - 主题 - 主题 - 主题. 伦敦:约瑟夫·斯特莱特.
  • (原始内容存档于2018-03-09). Runge, C. (1895) (英语). (原始内容存档于2018-09-22). über die numberische Auflösung von Difficialgleichungen. * 马瑟马提什·安纳伦*,46(2),167-178.
  • (原始内容存档于2018-09-21). Stagentz, S.H. (2015) (英语). * 非线性动态和乱象 * (第2版). 西视出版社.

PinePaper的ODE解码器覆盖约200行的Euler,RK4,以及适应性的Dormand-Prince RK45. 尝试在 [pinepaper.studio/editor] (/editor) 免费的笔鼓模拟.

Ready to create?

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

Open PinePaper Editor