欧拉法

🔖 math
🔖 numerical analysis
Author

Guangyao Zhao

Published

Dec 17, 2022

在开始前,统一一下数学语言:

目标是,知道初始值 \(y(x_n)\),和导函数 \(f(x_n, y(x_n))\),求解 \(x_n+h\) 处的 \(y(x_{n+1})\) 值。

1 前向欧拉法

Fig. 1: 前向(显式)欧拉法

\[ y(x_{n+1}) = y(x_{n}) + h*f(x_{n}, y(x_{n})) \]

即,知道初始值 \(y(x_{n})\) 和导数 \(f(x_{n}, y(x_{n}))\),即可计算出 \(y(x_{n+1})\)

2 后向欧拉法

Fig. 2: 后向(隐式)欧拉法

\[ y(x+h) = y(x) + h*f(x, y(x+h)) \]

我们的目的是求 \(y(x+h)\),结果后向欧拉法在求解其值的时候反而需要他自己,所以后向欧拉法并不能直接求解,需要按照以下步骤:

\[ \begin{aligned} y^{(0)}(x_{n+1}) &= y(x_{n}) + h*f(x_{n}, y(x_{n}))\\ y^{(1)}(x_{n+1}) &= y(x_{n}) + h*f(x_{n+1}, y^{(0)}(x_{n+1}))\\ y^{(2)}(x_{n+1}) &= y(x_{n}) + h*f(x_{n+1}, y^{(1)}(x_{n+1}))\\ \vdots\\ y^{(n)}(x_{n+1}) &= y(x_{n}) + h*f(x_{n+1}, y^{(n-1)}(x_{n+1}))\\ \end{aligned} \]

直到 \(y^{(n)}(x_{n+1})\) 收敛为止。

3 梯形法

无论是显示法还是隐式法的精度都不高,为了得到更高的精度,就想到了将两者结合,也就是梯形法:

Fig. 3: 梯形法

Fig. 3 可知,梯形的精度要比显示法和隐式法都高,计算公式:

\[ y(x_{n+1}) = y(x_{n}) + \frac{h}{2}\left(f(x_{n},y(x_{n})) + f(x_{n+1}, y(x_{n+1})) \right) \]

4 改进欧拉法

Sec. 3 可知,梯形法综合了显示欧拉和隐式欧拉可得到更高的精度,但是一个问题是其中的隐式欧拉法并不容易直接求解。改进欧拉法的计算方法如下:

\[ \begin{aligned} \text{预测:}y_p &=\overline{y_{n+1}} = y(x_n) + f(x_n,y_n)\\ \text{校正:}y_c &=y_{n+1} = y(x_n) + f(x_{n+1}, \overline{y_{n+1}})\\ \text{计算:}y_{n+1} &= y(x_n) + \frac{h}{2}\left(f(x_n,y(x_n)) + f(x_{n+1}, y_{n+1}) \right) \end{aligned} \]