數學 - 微分方程數值解 - 第 1 章 一階常微分方程初值問題 - 1.2 Euler 方法及其改進方法


1.2 Euler 方法及其改進方法

1.2.1 Euler 方法

\(f(x_n, y_n)\) 代替式 \((1.2)\) 中的 \(\varphi_n\),得到差分方程初值問題:

\[\left\{ \begin{align*} & y_{n+1} = y_{n} + h f(x_n, y_n) \\ & y_0 = y(a) \end{align*} \quad n=0,1,\cdots \right. \tag{1.2.1} \]

以上式問題的解作為微分方程初值問題的數值解,即 \(y(x_n) = y_n\),稱為 Euler 方法。容易看出式 \((1.3)\) 是一個單步顯式格式。

1.2.2 向后 Euler 法

\(f(x_{n+1}, y_{n+1})\) 代替式 \((1.2)\) 中的 \(\varphi_n\),得到差分方程初值問題:

\[\left\{ \begin{align*} & y_{n+1} = y_{n} + h f(x_{n+1}, y_{n+1}) \\ & y_0 = y(a) \end{align*} \quad n=0,1,\cdots \right. \tag{1.2.2} \]

以上式問題的解作為微分方程初值問題的數值解,即 \(y(x_n) = y_n\),稱為向后 Euler 方法。容易看出式 \((1.4)\) 是一個單步隱式格式,需要迭代法求解 \(y_{n+1}\)。使用簡單迭代法可以構造迭代格式如下:

\[\left\{ \begin{align*} & y_{n+1}^{(0)} = y_n + h f(x_n,y_n) \\ & y_{n+1}^{(k+1)} = y_n + h f(x_n,y_{n+1}^{(k)}) \quad k=0,1,\cdots \end{align*} \right. \tag{1.2.3} \]

下面考慮迭代格式 \((1.5)\) 的收斂性,由於 \(f(x,y)\) 關於 \(y\) 滿足 Lipschitz 條件,即

\[\left| f(x,y_1) - f(x,y_2) \right| \leqslant L\left| y_1 - y_2 \right| \]

那么可得到迭代收斂條件:

\[\begin{align*} \left| y_{n+1}^{(k+1)} - y_{n+1}^{(k)} \right| & = h \left| f(x_{n+1},y_{n+1}^{(k)}) - f(x_{n+1},y_{n+1}^{(k-1)}) \right| \\ & \leqslant h L \left| y_{n+1}^{(k)} - y_{n+1}^{(k - 1)} \right| \leqslant \cdots \\ & \leqslant (hL)^{k} \left| y_{n+1}^{(1)} - y_{n+1}^{(0)} \right| \end{align*} \tag{1.2.4} \]

因此向后 Euler 方法迭代條件為:\(hL < 1\)

1.2.3 梯形公式

考慮下列差分方程初值問題:

\[\left\{ \begin{align*} & y_{n+1} = y_{n} + \frac{h}{2} \left[ f(x_n, y_n) + f(x_{n+1}, y_{n+1}) \right] \\ & y_0 = y(a) \end{align*} \quad n=0,1,\cdots \right. \tag{1.2.5} \]

以上式問題的解作為微分方程初值問題的數值解,即 \(y(x_n) = y_n\),稱為梯形公式。容易看出式 \((1.4)\) 是一個單步隱式格式,需要迭代法求解 \(y_{n+1}\)。使用簡單迭代法可以構造迭代格式如下:

\[\left\{ \begin{align*} & y_{n+1}^{(0)} = y_n + h f(x_n,y_n) \\ & y_{n+1}^{(k+1)} = y_n + \frac{h}{2} \left[ f(x_n, y_n) + f(x_{n+1}, y_{n+1}^{(k)}) \right] \quad k=0,1,\cdots \end{align*} \right. \tag{1.2.6} \]

下面考慮迭代格式 \((1.8)\) 的收斂性。

\[\begin{align*} \left| y_{n+1}^{(k+1)} - y_{n+1}^{(k)} \right| & = \frac{h}{2} \left| f(x_{n+1},y_{n+1}^{(k)}) - f(x_{n+1},y_{n+1}^{(k-1)}) \right| \\ & \leqslant \frac{h L}{2} \left| y_{n+1}^{(k)} - y_{n+1}^{(k - 1)} \right| \leqslant \cdots \\ & \leqslant \left( \frac{hL}{2} \right)^{k} \left| y_{n+1}^{(1)} - y_{n+1}^{(0)} \right| \end{align*} \tag{1.2.7} \]

得梯形公式的收斂條件:\(hL/2 < 1\)

1.2.4 改進 Euler 法

Euler 法梯形公式做一個預測 - 校正系統

\[\left\{ \begin{align*} & \overline{y}_{n+1} = y_{n} + h f(x_n, y_n) \\ & y_{n+1}= y_{n} + \frac{h}{2} \left[ f(x_n, y_n) + f(x_{n+1}, \overline{y}_{n+1}) \right] \end{align*} \right. \tag{1.2.8} \]

其中,式 \((1.2.8)\) 的第一個式子為預測,第二個式子為校正

實際計算中,改寫成下式:

\[\left\{ \begin{align*} & y_p = y_{n} + h f(x_n, y_n) \\ & y_q = y_{n} + h f(x_{n+1}, y_p) \\ & y_{n+1} = (y_p + y_q) / 2 \end{align*} \quad n=0,1,\cdots, \right. \tag{1.2.9} \]

1.2.5 單步法的誤差估計

單步法一般形式: \(y_{n+1} = y_n + h \varphi_n\)

給出局部截斷誤差的定義

定義 1.2.1 局部截斷誤差

利用 \(x_i \, (i \leqslant n)\),假定 \(y(x)\) 已知,利用公式遞推一步計算 \(y_{n+1}\),與 \(y(x_{n+1})\) 的差的即為局部截斷誤差

\(R_{n+1} = y(x_{n+1}) - \overline{y}_{n+1}\),其中 \(\overline{y}_{n+1} = y(x_n) + h \varphi_n\)

給出整體截斷誤差的定義

定義 1.2.2 整體截斷誤差

利用公式從最開始 \(x_0\) 一步一步遞推計算 \(y_{n+1}\),與 \(y(x_{n+1})\) 的差的即為整體截斷誤差

\(e_{n+1} = y(x_{n+1}) - y_{n+1}\)

給出 \(p\) 階方法的定義:

定義 1.2.3 \(p\) 階方法

若某種數值方法的局部截斷誤差 \(R_{n+1} = O(h^{p+1})\),則稱該方法是 \(p\) 階方法。若進一步滿足下式

\[R_{n+1} = \psi(x_n, y(x_n)) h^{p+1} + O(h^{p+2}) \]

則稱 \(\psi(x_n, y(x_n)) h^{p+1}\) 為局部截斷誤差的主項。

(1) Euler 方法的截斷誤差

按局部截斷誤差的定義計算 Euler 方法的局部截斷誤差:

\[\begin{align*} R_{n+1} & = y(x_{n+1}) - \overline{y}_{n+1} \\ & = y(x_{n+1}) - \left( y(x_n) + h f(x_n, y_n) \right) \\ & = y(x_{n+1}) - \left( y(x_n) + h y'(x_n) \right) \\ & = y(x_{n}) + h y'(x_n) + h^2 y''(\xi) / 2 + o(h^2) - \left( y(x_n) + h y'(x_n) \right) \\ & = h^2 y''(\xi) / 2 + o(h^2) \quad x_n < \xi < x_{n+1} \tag{1.2.10} \end{align*} \]

故 Euler 方法為一階方法。

按整體截斷誤差的定義計算 Euler 方法的整體截斷誤差:

\[\begin{align*} \left| e_{n+1} \right| & = \left| y(x_{n+1}) - y_{n+1} \right|\\ & \leqslant \left| y(x_{n+1}) - \overline{y}_{n+1} \right| + \left| \overline{y}_{n+1} - y_{n+1} \right| \\ & \leqslant \left| R_{n+1} \right| + \left| y(x_n) - y_n \right| + h \left| f(x_n, y(x_n)) - f(x_n, y_n) \right| \\ & \leqslant \left| R_{n+1} \right| + \left| y(x_n) - y_n \right| + h L \left| y(x_n) - y_n \right|\\ & = \left| R_{n+1} \right| + (1 + h L)\left| e_n \right| \tag{1.2.11} \end{align*} \]

我們進一步假設 \(f(x,y)\) 充分光滑,有 \(y(x) \in C^{(2)}[a, b]\),則存在 \(M > 0\),使得 \(y''(x) \leqslant M\),此時有 \(\left| R_k \right| \leqslant M h^2 / 2\)。我們有 \(e_1 = R_1\),進一步計算整體截斷誤差:

\[\begin{align*} \left| e_{n+1} \right| & \leqslant M h^2 / 2 + (1 + h L)\left| e_n \right| \\ & \leqslant M h^2 / 2 + (1 + h L)\left[ M h^2 / 2 + (1 + h L)\left| e_{n-1} \right| \right] \\ & \leqslant M h^2 / 2 \left[1 + (1 + h L) + (1 + h L)^2 + \cdots + (1 + h L)^n \right] \\ & = \frac{hM}{2L} \left[ (1+hL)^{n+1} - 1 \right] \\ \end{align*} \]

因為 \((n+1)h \leqslant b - a\),所以

\[(1 + hL)^{n+1} \leqslant (1 + hL)^{\frac{b-a}{h}} < e^{L(b-a)} \]

因此有

\[\left| e_{n+1} \right| \leqslant \frac{hM}{2L} \left[ e^{L(b-a)} - 1 \right] = O(h) \]

可見 Euler 方法的整體截斷誤差與 \(h\) 同階,為一階方法。且 \(h \to 0\) 時,整體截斷誤差 \(e \to 0\)

(2) 向后 Euler 方法的截斷誤差

按局部截斷誤差的定義計算向后 Euler 方法的局部截斷誤差:

\[\begin{align*} R_{n+1} & = y(x_{n+1}) - \overline{y}_{n+1} \\ & = y(x_{n+1}) - \left( y(x_n) + h f(x_n, y_n) \right) \\ & = y(x_{n+1}) - \left( y(x_n) + h y'(x_n) \right) \\ & = y(x_{n}) + h y'(x_n) + h^2 y''(x_n) / 2 + o(h^2) - \left( y(x_n) + h y'(x_n) \right) \\ & = h^2 y''(x_n) / 2 + O(h^3) \quad x_n < \xi < x_{n+1} \tag{1.2.12} \end{align*} \]

(3) 梯形公式的截斷誤差

按局部截斷誤差的定義計算梯形公式的局部截斷誤差。

考慮 \(y(x_{n+1})\)

\[y(x_{n+1}) = y(x_n) + h y'(x_n) + \frac{h^2}{2} y''(x_n) + \frac{h^3}{6} y'''(x_n) + \frac{h^4}{24} y^{(4)}(\xi_1) \quad x_n < \xi_1 <x_{n+1} \]

考慮 \(\overline{y}_{n+1}\)

\[\begin{align*} \overline{y}_{n+1} & = y(x_n) + \frac{h}{2} \left( f(x_n, y(x_n)) + f(x_{n+1}, y(x_{n+1})) \right)\\ & = y(x_n) + \frac{h}{2} ( y'(x_n) + y'(x_{n+1}) ) \\ & = y(x_n) + \frac{h}{2} ( y'(x_n) + y'(x_n) + h y''(x_n) + \frac{h^2}{2} y'''(x_n) + \frac{h^3}{6} y^{(4)}(\xi_2) ) \quad x_n < \xi_2 <x_{n+1} \\ & = y(x_n) + h y'(x_n) + \frac{h^2}{2} y''(x_n) + \frac{h^3}{4} y'''(x_n) + \frac{h^4}{12} y^{(4)}(\xi_2) \quad x_n < \xi_2 <x_{n+1} \\ \end{align*} \]

可得梯形公式的局部截斷誤差:

\[\begin{align*} R_{n+1} = y(x_{n+1}) - \overline{y}_{n+1} = - \frac{h^3}{12} y'''(x_n) + O(h^4) \end{align*} \]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM