欧拉法
在开始前,统一一下数学语言:
- 自变量:\(x_n\)
- 因变量:\(y(x_n)\)
- 迭代微小距离:\(h\)
- 导函数:\(f(x_n, y(x_n))\)
- 精确值:\(y(x_n)\)
- 估计值:\(y_{n}\)
目标是,知道初始值 \(y(x_n)\),和导函数 \(f(x_n, y(x_n))\),求解 \(x_n+h\) 处的 \(y(x_{n+1})\) 值。
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 后向欧拉法
\[ 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 可知,梯形的精度要比显示法和隐式法都高,计算公式:
\[ 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} \]