# 一阶方程的初值问题

已知二元函数 f(x,y)f(x,y) 及函数 y(x)y(x) 在初值点 x0x_0 的函数值 y0y_0,求函数 y(x)y(x),使其满足

y=f(x,y)y(x0)=y0y'=f(x,y) --① \\ y(x_0)=y_0--②

理论上说,只要 f(x,y)f(x,y) 适当光滑,例如:对于 yy 满足 LipschitzLipschitz 条件

LipschitzLipschitz 条件:

存在 L0L\geq 0,对于任意的 yyyˉ\bar y,就有

f(x,y)f(x,yˉ)Lyyˉ|f(x,y)-f(x,\bar y)|\leq L|y-\bar y|

可以保证满足上述初值的解 y=y(x)y=y(x) 存在并唯一

# 欧拉方法

# 显示欧拉法

xnx_n 处的导数 y(xn)y'(x_n) 可以近似地表示成一阶向前差商 或者 对①式进行积分

可以将常微分方程初值问题式①②转换成:

{yn+1=yn+hf(xn,yn)n=0,1,2,...y0=y(x0)\left\{\begin{matrix} y_{n+1}=y_n+hf(x_n,y_n) &n=0,1,2,... \\ y_0=y(x_0)& \end{matrix}\right.

几何意义:

# 隐式欧拉法

用向后差商 y(xn+1)y(xn)h\frac{y(x_{n+1})-y(x_n)}{h} 替代 y(xn+1)y'(x_{n+1})

于是可导出一个新的计算方法:

{yn+1=yn+hf(xn+1,yn+1)n=0,1,2,...y0=y(x0)\left\{\begin{matrix} y_{n+1}=y_n+hf(x_{n+1},y_{n+1}) &n=0,1,2,... \\ y_0=y(x_0)& \end{matrix}\right.

# 二步欧拉法

积分区间的宽度选为二步步长,即积分区间为 [xn1,xn+1][x_{n-1},x_{n+1}]

转换成:

{yn+1=yn1+hf(xn,yn)n=0,1,2,...y0=y(x0)\left\{\begin{matrix} y_{n+1}=y_{n-1}+hf(x_{n},y_{n}) &n=0,1,2,... \\ y_0=y(x_0)& \end{matrix}\right.

转换过程

xn1xn+1ydx=y(xn+1)y(xn1)=xn1xn+1f[x,y(x)]dx(xn+1xn1)f[x,y(x)]=2hf[x,y(x)]\begin{aligned} \int_{x_{n-1}}^{x_{n+1}}y'dx&=y(x_{n+1})-y(x_{n-1})\\ &=\int_{x_{n-1}}^{x_{n+1}}f[x,y(x)]dx\\ &\approx(x_{n+1}-x_{n-1})f[x,y(x)]\\ &=2hf[x,y(x)] \end{aligned}

# 梯形欧拉法

梯形公式欧拉法是显式欧拉法和隐式欧拉法的算术平均

{yn+1=yn+h2[f(xn,yn)+f(xn+1,yn+1)]n=0,1,2,...y0=y(x0)\left\{\begin{matrix} y_{n+1}=y_{n}+\frac{h}{2}[f(x_{n},y_{n})+f(x_{n+1},y_{n+1})] &n=0,1,2,... \\ y_0=y(x_0)& \end{matrix}\right.

# 改进的欧拉法

可以先用显式欧拉法求出 y(xn+1)y(x_{n+1}) 的一个粗略近似值 (预报值 yˉn+1\bar y_{n+1}), 然后用它代入梯形法公式的右端, 用梯形法计算 y(xn+1)y(x_{n+1}) 的较为精确的近似值(校正值 yn+1y_{n+1}

预报值

yˉn+1=yn+hf(xn,yn)\bar y_{n+1}=y_n+hf(x_n,y_n)

校正值

yn+1=yn+h2[f(xn,yn)+f(xn+1,yˉn+1)]y_{n+1}=y_n+\frac{h}{2}[f(x_n,y_n)+f(x_{n+1},\bar y_{n+1})]

两种表示方式

  • 嵌套形式

    yn+1=yn+h2[f(xn,yn)+f(xn+1,yn+hf(xn,yn))]y_{n+1}=y_n+\frac{h}{2}[f(x_n,y_n)+f(x_{n+1},y_n+hf(x_n,y_n))]

  • 平均形式

    {yp=yn+hf(xn,yn)yc=yn+hf(xn,yp)yn+1=12(yp+yc)\left\{\begin{matrix} y_p= y_n+hf(x_n,y_n) \\ y_c=y_n+hf(x_n,y_p)\\ y_{n+1}=\frac{1}{2}(y_p+y_c) \end{matrix}\right.

也可以写成:

{yn+1=yn+h2(k1+k2)k1=f(xn,yn)k2=f(xn+1,yn+hk1)\left\{\begin{matrix} y_{n+1}= y_n+\frac{h}{2}(k_1+k_2) \\ k_1=f(x_n,y_n)\\ k_2=f(x_{n+1},y_n+hk_1) \end{matrix}\right.

几何意义:

y(x)y(x)xnx_nxn+1x_{n+1} 两个点的导数的近似值的算术平均替代在点 ξ\xi 上的导数值

# 局部截断误差

# 定义

若假定在求 yn+1y_{n+1} 的递推公式中等式右边的所有量为精确的(即在前一步 yny_n 准确的前提下),y(xn+1)yn+1y(x_{n+1})-y_{n+1} 称为此方法的局部截断误差

若局部截断误差为 O(hp+1)O(h^{p+1}),则此方法的精度为 pp

# 显式欧拉法的精度(一阶)

# 隐式欧拉法的精度(一阶)

# 二步欧拉法的精度(二阶)

# 梯形欧拉法的精度(二阶)

# 改进欧拉法的精度(二阶)

# 龙格 - 库塔法

龙格 - 库塔方法的基本思想:在 [xn,xn+1][x_n, x_{n+1}]多预报几个点kik_i 值, 并用其加权平均值作为 kk^* 的近似值从而构造出具有更高精度的计算公式

补充知识:二元泰勒展开

# 二阶龙格 - 库塔法

证明

# 常用的二阶龙格 - 库塔

# 单步法的收敛性与稳定性

# 收敛性

# 稳定性