# 常微分方程
一个初值问题 (initial value problem, IVP) 由一个 ODE 和初始条件组成:
{y′=f(x,y),y(x0)=y0.
这里的 y 可以是标量,也可以是向量。但是只能随一个变量 x 变化。
# One-step Methods
# Euler's Method
就是使用泰勒级数展开。基于泰勒级数的一阶展开,有
y(x+h)=y(x)+hy′(x)+ϵ(h2).
于是对 n>0, 有
yn+1=yn+hf(xn,yn).
该形式称为前向欧拉方法 (Forward Euler method), 简称欧拉法 (Euler method).
这实际上与 ResNet 也就是前馈含残差的神经网络形式类似。
欧拉法的精度是 O(h) 的,误差是 ϵ(h2) 的。这样,当 h 较大时,会产生不稳定的问题 (insteablity problem).
如果将前向欧拉法的 f(xn,yn) 中的 yn 替换为 yn+1, 则称为后向欧拉方法 (Backward Euler method). 这样,yn+1 实际上是隐式的,需要使用优化方法求解,例如使用牛顿法求解。这样每一次求解实际上都需要一次内部的迭代,这与循环神经网络 (RNN) 类似。
# Runge-Kutta Methods
Runge-Kutta 方法是数值求解 ODE 的经典方法,其基本思想是使用泰勒级数展开,然后使用更高阶的项来近似 y(x+h).
以四阶 Runge-Kutta 方法为例,其基本形式为
yn+1=yn+6h(k1+2k2+2k3+k4),
其中
⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧k1=f(xn,yn),k2=f(xn+2h,yn+2hk1),k3=f(xn+2h,yn+2hk2),k4=f(xn+h,yn+hk3).
其精度是 O(h4) 的,误差是 ϵ(h5) 的。