數(shù)值ODE(二)—— 歐拉差分

\textbf{初值問題:}\frac{\mathrmdph1pf7y}{\mathrm9pbx3blx}=f(x, y), \quad y(x_0)=y_0

離散形式

初值問題的數(shù)值解法兑牡,其實就是就是尋求y(x)在一系列離散點{a}={x}_{0}<x_{1}<\cdots<{x}_{N}=上的近似值税灌,相鄰兩點的間距h_n=x_{n+1}-x_n均函,一般步長都取相等的值亿虽,也就是有h_{n} \equiv h \quad(n=0,1,2, \cdots),于是x_n=x_0+nh苞也。我們用數(shù)值求解的函數(shù)y的近似洛勉,就是若干段分段折線

所以接下來要面臨的問題就是如迟,如何離散化原微分方程坯认?

一種最顯然的方式,把常數(shù)f(x_0, y_0)當(dāng)作y(x_0, x_1)上的導(dǎo)函數(shù)近似值氓涣,這樣就有y_1=y_0+hf(x_0, y_0),就這樣依次類推下去陋气,計算公式就是:{y}_{n+1}={y}_{n}+{h} f\left({x}_{n}, {y}_{n}\right), \quad {n}={0}, {1}, {2}, \cdots

這種方法叫做顯式歐拉(Explicit Euler)劳吠。是數(shù)值ODE里可以說是最簡單的方法吧。
直覺告訴我們巩趁,當(dāng)離散間隔h取的足夠小的時候痒玩,數(shù)值解是能對原函數(shù)有好的近似的。

執(zhí)行如下Julia代碼:

# using Plots; using LaTeXStrings
p = []
for h in [0.25, 0.2, 0.1, 0.05]
    x = 0 : h : 5
    y = [1.0]
    for i = 1 : length(x) - 1
        push!(y, y[i] + h * y[i])
    end
    plot(x, y, label="h=$h")
    plot!(exp, x, label=L"y=e^x")
    t = plot!(x, exp.(x) - y, label="error")
    push!(p, t)
end
plot(p[1],p[2],p[3],p[4], layout=(2, 2), legend=:topleft)

使用顯式歐拉方法對\frac{dy}{dx}=y, \;\;y|_{x=0}=1用不同的步長做數(shù)值近似议慰,其結(jié)果如下圖:

圖1:顯式歐拉

顯式歐拉公式是用向前差商來代替導(dǎo)數(shù)的:y^{\prime}\left(x_{n}\right) \approx \frac{y\left(x_{n+1}\right)-y\left(x_{n}\right)}{h}\approx f(x_n, y_n)

如果使用向后差商代替導(dǎo)數(shù):y^{\prime}\left(x_{n+1}\right) \approx \frac{y\left(x_{n+1}\right)-y\left(x_{n}\right)}{h}就得到了隱式歐拉公式(Implicit Euler)
\left\{\begin{array}{l} y_{n+1}=y_{n}+h f\left(x_{n+1}, y_{n+1}\right) \\ y_{0}=y\left(x_{0}\right) \end{array} \quad n=0,1,2, \cdots\right.

顯式歐拉是可以一步一步迭代進(jìn)行計算的蠢古。隱式歐拉,需要注意的是别凹,已知(x_n, y_n)時求y_{n+1}時是通過方程y_{n+1}=y_{n}+h f\left(x_{n+1}, y_{n+1}\right)來完成的草讶!所以隱式歐拉要比顯式歐拉求解起來要困難一些。

如果f是比較好的函數(shù)炉菲,那么可以直接寫出y_{n+1}y_n, x_{n+1}之間的關(guān)系堕战。否則可能就要解一個非線性方程,幸運的是拍霜,在hL<1的時候嘱丢,(Lf(x,y)的Lipschitz常數(shù)),可以使用迭代法來求解這個方程:

\left\{\begin{array}{l} {y}_{n+1}^{(0)}={y}_{n}+{h} {f}\left({x}_{n}, {y}_{n}\right) \\ {y}_{n+1}^{(k+1)}={y}_{n}+{h} f\left({x}_{n+1}, {y}_{n+1}^{(k)}\right), \quad {k}={0}, {1}, {2}, \cdots \end{array}\right.

隱式歐拉和顯式歐拉是最基礎(chǔ)的兩種離散形式祠饺。在求解y_{n+1}的時候只用到了y_n的信息越驻,這樣的方法叫做單步法

如果使用中心差商代替導(dǎo)數(shù):y^{\prime}\left(x_{n}\right) \approx \frac{y\left(x_{n+1}\right)-y\left(x_{n-1}\right)}{2 h}就得到了兩點歐拉公式y_{n+1}=y_{n-1}+2 h f\left(x_{n}, y_{n}\right), \quad n=0,1,2, \cdots這個公式在計算y_{n+1}的時候要用到y_ny_{n-1}道偷,也就是前兩步的信息缀旁,這樣的方法叫做多步法。在應(yīng)用兩點歐拉公式的時候勺鸦,除了給出的初值條件里的y_0诵棵,還需要用顯式歐拉或者隱式歐拉方法求出y_1,然后再進(jìn)行迭代計算祝旷。因為兩點歐拉公式應(yīng)用到了兩步的信息履澳,所以通常比單步的方法要精確嘶窄。

以下作出類似上面顯式歐拉公式的圖:

圖2:隱式歐拉
圖3:兩點法

\frac{dy}{dx}=ay, \; (a\neq 0) 常用來作為測試函數(shù),用來測試各種數(shù)值格式的性能距贷。

誤差分析

給定一個具體的方法柄冲,我們還要去研究這個數(shù)值方法產(chǎn)生的誤差有多大。關(guān)于要研究什么樣的誤差忠蝗,看這里现横。

兩大類誤差,一種是離散形式來近似的截斷誤差阁最,另一種是迭代格式中不斷積累的計算誤差戒祠。

局部截斷誤差是在假設(shè)y_n=y(x_n)被精確計算的時候,y(x_{n+1})y_{n+1}的差速种。
對于顯式歐拉方法:\begin{aligned} y\left(x_{n+1}\right)=y\left(x_{n}+h\right) &=y\left(x_{n}\right)+h y^{\prime}\left(x_{n}\right)+\frac{h^{2}}{2 !} y^{\prime \prime}\left(x_{n}\right)+O\left(h^{3}\right) \\ &=y\left(x_{n}\right)+h f\left(x_{n}, y_{n}\right)+\frac{h^{2}}{2 !} y^{\prime \prime}\left(x_{n}\right)+O\left(h^{3}\right) \end{aligned}于是:y\left(x_{n+1}\right)-y_{n+1}=\frac{h^{2}}{2 !} y^{\prime \prime}\left(x_{n}\right)+O\left(h^{3}\right)=O\left(h^{2}\right)同理姜盈,對于隱式歐拉方法:y\left(x_{n+1}\right)-y_{n+1}=-\frac{h^{2}}{2 !} y^{\prime \prime}\left(x_{n}\right)+O\left(h^{3}\right)=O\left(h^{2}\right)

整體截斷誤差是在不考慮舍入誤差的情況下, y(x_{n+1})y_{n+1}之間的誤差。記e_{n+1}=y\left(x_{n+1}\right)-y_{n+1}配阵,可以證明馏颂,在有限的閉區(qū)間內(nèi),顯式歐拉公式和隱式歐拉公式的整體截斷誤差與步長h呈線性關(guān)系|e_{n+1}|\leq Ch就是說棋傍,在[0,T]這個區(qū)間上救拉,如果我們把步長縮小為原來的一半,那么得到的數(shù)值解在x=T這個位置的截斷誤差也縮小為原來的一半瘫拣,這條性質(zhì)可以在圖1和圖2中得到驗證亿絮。

so,那么問題來了麸拄,是不是把步長取的越小越好呢壹无?
現(xiàn)在我們把之前數(shù)值模擬的那個ODE做一個小小的改動,考慮\frac{dy}{dx}=2y, \;\;y|_{x=0}=1這個方程感帅。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末斗锭,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子失球,更是在濱河造成了極大的恐慌岖是,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件实苞,死亡現(xiàn)場離奇詭異豺撑,居然都是意外死亡,警方通過查閱死者的電腦和手機黔牵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進(jìn)店門聪轿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人猾浦,你說我怎么就攤上這事陆错〉婆祝” “怎么了?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵音瓷,是天一觀的道長对嚼。 經(jīng)常有香客問我,道長绳慎,這世上最難降的妖魔是什么纵竖? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮杏愤,結(jié)果婚禮上靡砌,老公的妹妹穿的比我還像新娘。我一直安慰自己珊楼,他們只是感情好通殃,可當(dāng)我...
    茶點故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著亥曹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪恨诱。 梳的紋絲不亂的頭發(fā)上媳瞪,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天,我揣著相機與錄音照宝,去河邊找鬼蛇受。 笑死,一個胖子當(dāng)著我的面吹牛厕鹃,可吹牛的內(nèi)容都是我干的兢仰。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼剂碴,長吁一口氣:“原來是場噩夢啊……” “哼把将!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起忆矛,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤察蹲,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后催训,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體洽议,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年漫拭,在試婚紗的時候發(fā)現(xiàn)自己被綠了亚兄。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡采驻,死狀恐怖审胚,靈堂內(nèi)的尸體忽然破棺而出匈勋,到底是詐尸還是另有隱情,我是刑警寧澤菲盾,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布颓影,位于F島的核電站,受9級特大地震影響懒鉴,放射性物質(zhì)發(fā)生泄漏诡挂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一临谱、第九天 我趴在偏房一處隱蔽的房頂上張望璃俗。 院中可真熱鬧,春花似錦悉默、人聲如沸城豁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽唱星。三九已至,卻和暖如春跟磨,著一層夾襖步出監(jiān)牢的瞬間间聊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工抵拘, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留哎榴,地道東北人。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓僵蛛,卻偏偏與公主長得像尚蝌,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子充尉,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,955評論 2 355