数值分析(11):常微分方程的数值解法之Euler法
常微分方程的數值解法之Euler法
- 1. 引言
- 2. Euler方法
- 2.1 顯式Euler方法
- 2.2 隱式Euler方法
- 2.3 梯形方法
- 3. 隱式方程的迭代求解
- 4. 預估-校正方法
- 5. 誤差分析
- 5.1 顯式單步方法誤差分析
- 5.2 隱式單步方法誤差分析
1. 引言
我們通常遇到的一階常微分方程初值問題,如下所示:
如何證明上面的微分方程存在解,且解唯一呢?則需要以下的存在唯一性定理:
上面定理中的Lipschitz條件,其定義如下:
這個定義很難驗證,通常使用以下的充分條件來判斷函數是否滿足Lipschitz條件,即:
那么對于上面存在唯一性定理中,同樣可以用充分條件來判斷fff是否滿足對yyy的Lipschitz條件,即:
講述了存在唯一性定理后,接下來來看如何解決無法寫出解析表達式的微分方程。一種最樸素的方式就是用直線去逼近,把積分區間分成很多段,每一段都使用直線逼近原曲線,用圖像表示即為:
為了方便起見,把y(x)y(x)y(x)在xnx_nxn?處的精確值記為y(xn)y(x_n)y(xn?), 其近似值用yny_nyn?表示。
在求微分方程的數值解時,做以下的歸類:
由于是近似,自然要分析誤差,誤差分為兩種,整體截斷誤差和局部截斷誤差,這兩個定義如下:
兩者的區別是:整體截斷誤差是存在誤差累積的,累積前n步的誤差;局部截斷誤差是只計算當前第n步的誤差。
2. Euler方法
Euler方法就是引言中用直線近似來求解微分方程的方法。
2.1 顯式Euler方法
所謂“顯式”,就是說yn+1y_{n+1}yn+1?只在等式左邊出現。只要能夠求出yn+1y_{n+1}yn+1?,根據區間分段結果,直接用直線相連即可。
當然上面這個計算公式可以用三種方法得到,分別是:數值積分方法、Taylor展開方法、數值微分方法,即:
上面只用到了yny_nyn?即可求解yn+1y_{n+1}yn+1?,因此是單步法。
2.2 隱式Euler方法
隱式法就是等式右邊出現yn+1y_{n+1}yn+1?,可以看到顯式和隱式的區別在于切線的斜率選取的問題,選取點(xn,yn)(x_n,y_n)(xn?,yn?)就是顯式,選取點(xn+1,yn+1)(x_{n+1},y_{n+1})(xn+1?,yn+1?)就是隱式。
2.3 梯形方法
如果把顯式和隱式的切線斜率公式相加取均值,就得到了梯形公式,即:
3. 隱式方程的迭代求解
梯形方法和隱式Euler方法都是隱式公式,這就涉及到一個問題,等式左右兩邊都有未知數yn+1y_{n+1}yn+1?,這個等式怎么解?
如果是線性的等式,自然可以通過移項轉換變成顯式的等式,如果是非線性的等式,可以通過前面《數值分析(3):線性代數方程組的迭代解法》中所述的迭代解法求解。
對于隱式Euler法,即用下式迭代:
上面的迭代公式中,第一步迭代還是需要用顯式公式進行計算,后面的迭代采用隱式Euler法。很自然地,需要考慮上述迭代法的收斂性,即:
對于梯形公式,有迭代公式:
其迭代收斂條件為:
4. 預估-校正方法
為了消除迭代,出現了預估-校正的方法,先給出粗糙估計然后再給出稍精確的求解,這是微分方程數值解常用方法。
比如改進的Euler方法,即:
這公式稱為改進的Euler公式,其精度比 Euler 公式好,比梯形公式稍差些,但是,它是顯式方法。
5. 誤差分析
5.1 顯式單步方法誤差分析
顯式單步方法的通式如下:
正如前述,其整體截斷誤差為通過x0,y0x_0,y_0x0?,y0?,計算y1,y2,...,yny_1,y_2,...,y_ny1?,y2?,...,yn?,最后再計算整體截斷誤差en=y(xn)?yne_n=y(x_n)-y_nen?=y(xn?)?yn?,注意帶括號的是精確值,帶下標的是估計值,
當然整體截斷誤差與整個計算中每步情況有關,但一般求得較為困難,因此先考慮一步的誤差。
顯式單步法的局部截斷誤差為:
單步法的階,用來衡量計算方法的精度:
主局部截斷誤差,它就相當于泰勒展開中的提取余項的操作,對于ppp階方法中的p+1p+1p+1階無窮小,它進一步將其細化為p+1p+1p+1次的項,和p+2p+2p+2階無窮小,而 p+1p+1p+1次的項 就是主局部截斷誤差。
5.2 隱式單步方法誤差分析
在顯式單步方法誤差分析中,我們分析了局部截斷誤差表達式,單步法的階、主局部截斷誤差。那么對于隱式法,完全可以類似的定義。
比如對于隱式Euler法:
其局部截斷誤差表達式為:
Tn+1=y(xn+1)?[y(xn)+hf(xn+1,y(xn+1))]T_{n+1}=y\left( x_{n+1} \right) -\left[ y\left( x_n \right) +hf\left( x_{n+1},y\left( x_{n+1} \right) \right) \right] Tn+1?=y(xn+1?)?[y(xn?)+hf(xn+1?,y(xn+1?))]
對其進行泰勒展開化簡后得:
Tn+1=y(xn+1)?[y(xn)+hf(xn+1,y(xn+1))]=y(xn+h)?[y(xn)+hy′(xn+h)]=y(xn)+hy′(xn)+h22!y′′(xn)+o(h3)?y(xn)?h(y′(xn)+hy′′(xn)+o(h2))=?h22y′′(xn)+o(h3)T_{n+1}=y\left( x_{n+1} \right) -\left[ y\left( x_n \right) +hf\left( x_{n+1},y\left( x_{n+1} \right) \right) \right] \\ =y\left( x_n+h \right) -\left[ y\left( x_n \right) +hy'\left( x_n+h \right) \right] \\ =y\left( x_n \right) +hy'\left( x_n \right) +\frac{h^2}{2!}y''\left( x_n \right) +o\left( h^3 \right) -y\left( x_n \right) -h\left( y'\left( x_n \right) +hy''\left( x_n \right) +o\left( h^2 \right) \right) \\ =-\frac{h^2}{2}y''\left( x_n \right) +o\left( h^3 \right) Tn+1?=y(xn+1?)?[y(xn?)+hf(xn+1?,y(xn+1?))]=y(xn?+h)?[y(xn?)+hy′(xn?+h)]=y(xn?)+hy′(xn?)+2!h2?y′′(xn?)+o(h3)?y(xn?)?h(y′(xn?)+hy′′(xn?)+o(h2))=?2h2?y′′(xn?)+o(h3)
因此單步法的階為:一階方法
主局部截斷誤差為:?h22y′′(xn)-\frac{h^2}{2}y''\left( x_n \right)?2h2?y′′(xn?)
其他的隱式方法完全可以類比推導,這里就省略不寫了。
求積公式的余項和數值解的局部截斷誤差和主局部截斷誤差有如下關系,以下關系也是很容易理解的,因為微分方程的數值解就是可以通過求積公式導出,自然它們的余項具有非常相近的形式:
參考文獻:
關治,陸金甫《數值方法》
總結
以上是生活随笔為你收集整理的数值分析(11):常微分方程的数值解法之Euler法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端学习(2539):节点类型
- 下一篇: 产品市场营销策划方案与案例PPT模板