抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

常微分方程

微分方程

观察下面两个方程
$$
x^2=1
$$

$$
\frac{\mathrm{d}y}{\mathrm{d}x}=2x
$$

发现下面的方程包含导数,我们称这类包含未知变量(y)对自变量(x)的导数的方程为微分方程,上面的普通方程叫代数方程

此外我们发现,这个微分方程中,最高阶的导数是这个y对x的一阶导数,于是这个微分方程的阶数为1

我们将微分方程分为:

  • 常微分方程(ODE),只涉及一个自变量的导数
  • 偏微分方程(PDE),涉及多个自变量的偏导数

解析解法

分离变量法

适用于形如 $\frac{dy}{dx} = f(x)g(y)$ 的方程

例:求解 $\frac{dy}{dx} = xy$ ,初始条件 $y(0)=1$

将所有与 y 相关的项移到一边,与 x 相关的项移到另一边:
$$
\frac{dy}{y} = x , dx
$$
对两边积分
$$
\int \frac{1}{y} , dy = \int x , dx
$$
左边
$$
\int \frac{1}{y} , dy = \ln|y| + C_1
$$
右边
$$
\int x , dx = \frac{1}{2}x^2 + C_2
$$
合并常数
$$
\ln|y| = \frac{1}{2}x^2 + C
$$

$$
|y| = e^{\frac{1}{2}x^2 + C} = e^C \cdot e^{\frac{1}{2}x^2}
$$

令$A = \pm e^C$
$$
y = A e^{\frac{1}{2}x^2}
$$
带入初始条件
$$
y(0) = A e^{\frac{1}{2} \cdot 0^2} = A \cdot 1 = A = 1
$$
于是解为
$$
y = e^{\frac{1}{2}x^2}
$$

变量替换法

适用于齐次型方程,形如$\frac{dy}{dx}=y(\frac{y}{x})$

例:求解$\frac{dy}{dx} = \frac{x + y}{x - y}$,初始条件$y(0)=1$

经观察,右侧公式可以变形为
$$
\frac{x + y}{x - y} = \frac{1 + \frac{y}{x}}{1 - \frac{y}{x}}
$$
我们使用变量进行替换 $v = \frac{y}{x}$

对 $y=vx$ 关于 x求导
$$
\frac{dy}{dx} = v + x \frac{dv}{dx}
$$
带入原式
$$
v + x \frac{dv}{dx} = \frac{x + y}{x - y} = \frac{x + vx}{x - vx} = \frac{1 + v}{1 - v}
$$
化简得到
$$
v + x \frac{dv}{dx} = \frac{1 + v}{1 - v}
$$
得到
$$
x \frac{dv}{dx} = \frac{1 + v^2}{1 - v}
$$
得到
$$
\frac{1 - v}{1 + v^2} dv = \frac{1}{x} dx
$$
分解积分
$$
\int \frac{1}{1 + v^2} dv - \int \frac{v}{1 + v^2} dv = \frac{1}{x} dx
$$
得到
$$
\arctan v - \frac{1}{2} \ln |1 + v^2| = \ln |x| + C
$$
带入原变量
$$
\arctan \left( \frac{y}{x} \right) - \frac{1}{2} \ln \left( 1 + \left( \frac{y}{x} \right)^2 \right) = \ln |x| + C
$$

$$
\arctan \left( \frac{y}{x} \right) - \frac{1}{2} \left( \ln (x^2 + y^2) - 2 \ln |x| \right) = \ln |x| + C
$$

化简
$$
\arctan \left( \frac{y}{x} \right) - \frac{1}{2} \ln (x^2 + y^2) = C
$$
应用初始条件,得到
$$
\arctan \left( \frac{0}{1} \right) - \frac{1}{2} \ln (1^2 + 0^2) = \arctan 0 - \frac{1}{2} \ln 1 = 0 - 0 = 0
$$
因此 $C=0$

最终解为
$$
\arctan \left( \frac{y}{x} \right) = \frac{1}{2} \ln (x^2 + y^2)
$$

伯努利方程

形如
$$
\frac{dy}{dx}=P(x)y + Q(x)y^n , (n \neq 0, 1)
$$

欧拉方法

大部分情况下无法解出解析解,而是用数值解模拟出 key-value 对

一阶欧拉方法

欧拉方法是一种简单的数值方法,用于求解ODE的初值问题

假设时间步长为 $\Delta t$ ,则:
$$
x_{t+\Delta t}=x_t + v(x_t, t)\Delta t
$$
其物理意义是,每一小段时间都朝着当前方向匀速走一小段时间。

误差量级为 $O(\Delta t^2)$ ,步长要非常小才能控制误差,但是胜在使用便捷,只需要计算一次速度

例子

例:用欧拉方法求下列式子在$[0, 1]$的解,步长为0.2
$$
\frac{dy}{dx} = -2x y, \quad y(0) = 1
$$
根据导数的定义
$$
\frac{dy}{dx} \approx \frac{y(x + h) - y(x)}{h}
$$
对于方程 $\frac{dy}{dx} = f(x, y)$,欧拉方法的迭代公式为:
$$
y_{n+1} = y_n + h \cdot f(x_n, y_n)
$$
步0:根据初始条件 $x_0 = 0, y_0 = 1$,
$$
f(x_0, y_0) = -2 \cdot 0 \cdot 1 = 0
$$

$$
y_1 = y_0 + h \cdot f(x_0, y_0) = 1 + 0.2 \cdot 0 = 1
$$

步1:$x_1 = 0.2, y_1 = 1$
$$
f(x_1, y_1) = -2 \cdot 0.2 \cdot 1 = -0.4
$$

$$
y_2 = y_1 + h \cdot f(x_1, y_1) = 1 + 0.2 \cdot (-0.4) = 1 - 0.08 = 0.92
$$

以此类推,得到最终的数值解。当然下面表哥的误差很大,但当步长非常小时,误差就会很小

步数 x y
0 0.0 1.0
1 0.2 1.0
2 0.4 0.92
3 0.6 0.7728
4 0.8 0.587328
5 1.0 0.39938304

二阶欧拉方法

Heun’s method(改进欧拉方法),核心思想是不仅看当前速度,还要预测未来速度的变化趋势

  1. 先用欧拉法预测一个临时点

$$
\tilde{x}_{t+\Delta t} = x_t + v(x_t, t) \Delta t
$$

  1. 再估计未来的速度

$$
v_2 = v(\tilde{x}_{t+\Delta t}, t+\Delta t)
$$

  1. 最终结果取平均

$$
x_{t+\Delta t} = x_t + \frac{1}{2}(v(x_t, t) + v_2) \Delta t
$$

局部误差降低到 $O(\Delta t^3)$,全局误差 $O(\Delta t^2)$

注意,$\Delta t$ 通常是小于1的数,所以 $\Delta t^3 < \Delta t^2$

四阶

Runge-Kutta 4 ,更高阶的欧拉方法是沿着曲线移动的,用计算次数来换误差,由于大步幅误差也很低,所以可以减少采样次数

$$
\begin{aligned}
k_1 &= v(x_t, t) \
k_2 &= v(x_t + \frac{\Delta t}{2} k_1, t + \frac{\Delta t}{2}) \
k_3 &= v(x_t + \frac{\Delta t}{2} k_2, t + \frac{\Delta t}{2}) \
k_4 &= v(x_t + \Delta t k_3, t + \Delta t)
\end{aligned}
$$

$$
x_{t+\Delta t} = x_t + \frac{\Delta t}{6}(k_1 + 2k_2 + 2k_3 + k_4)
$$

误差降低至 $O(\Delta t^5)$

评论