中点法

来自testwiki
imported>Wolfch2024年10月26日 (六) 06:38的版本
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转到导航 跳转到搜索
中點法的圖示說明,假設yn等於y(tn)的實際值。中點法計算yn+1讓紅色的弦近似平行於中點處的切線(綠色)

数值分析裡的中点法(midpoint method)是求解常微分方程的一種数值方法,屬於單步法。

y(t)=f(t,y(t)),y(t0)=y0.

上式的顯式中點法為 Template:NumBlk 隱式中點法為 Template:NumBlk n=0,1,2,。此處h是步階長度,是一個小的正數,tn=t0+nh,,而yn是計算y(tn)的近似值。顯式中點法也稱為是改良的歐拉方法(modified Euler method)[1],隱式中點式是最簡單的Template:Link-en(Collocation method),可用在哈密頓力學,也就是Template:Link-en

此方法的名稱是因為上述公式會用到函數在t=tn+h/2=tn+tn+12位置的值,也就是在tn以及tn+1中點時的值,前者的值已知,後者的值未知,在計算中點的值時,也需要有一些假設,才能進行計算。

配合圖示(見右圖)會比較容易理解此一方法。在原始的欧拉方法裡,會用f(tn,yn),計算曲線在(tn,yn)處的切線。此切線和垂直線t=tn+1的交點即為下一個點yn+1的值。不過,若此函數的二階導數在時間tntn+1的區間均為正, 或是均為負(如圖中的例子),隨著h加大,曲線和切線的距離會越來越遠,導致大誤差。圖中所畫的中點的切線(上方,綠線)比較可以近似這段曲線。不過因為要求解的就是此一曲線,時間tn的資訊已知,其他資訊不足,可能無法精準的畫出中點處的切線。

因此,會先用原始的歐拉方法估計在中點的y(t)值,再用f()以及估計的中點資訊,計算切線斜率。用改善後的切線從yn計算yn+1的值。最後一步即為圖的紅色弦線。因為紅色弦線是估計值,用的是y(t)在中點處的估計值,不一定真的會和綠線(真正的中點切線)平行,仍會有誤差。

中點法每一步的局部誤差是O(h3),全域誤差是O(h2)。其運算比歐拉方法要大,但在h0的過程中,中點法的誤差會比歐拉方法降低的更快。

此法也是高階方法(如龙格-库塔法)的範例之一。

中點法的推導

微分方程y=y, y(0)=1的数值积分求解图。 Template:Legend Template:Legend Template:Legend 步长h=1.0
同一個方程的數值方法求解,步长縮減為h=0.25.,可以看出中點法的收斂比歐拉法要快

中點法可以視為是改良版的欧拉方法

yn+1=yn+hf(tn,yn),

因此用類似的方式推導。 推導欧拉法的關鍵是以下的近似等式 Template:NumBlk 是源自以下的斜率公式 Template:NumBlk ,其中y=f(t,y).

在中點法中,將(3)改為更準確的式子

y(t+h2)y(t+h)y(t)h

因此可以得到以下類似(3)式,計算y(t+h)的式子 Template:NumBlk

在上式中,因為還不知道yt+h/2的值,無法用上式直接計算y(t+h)。解法是用欧拉方法來求解y(t+h/2):

y(t+h2)y(t)+h2y(t)=y(t)+h2f(t,y(t)),

代入(4)式中,可得

y(t+h)y(t)+hf(t+h2,y(t)+h2f(t,y(t)))

以上則是顯式的中點法(1e)。

隱式中點法(1i)可以將此時間內的波形假設為直線,中間步數t+h/2的值用y(t)y(t+h)的平均值來表示

y(t+h2)12(y(t)+y(t+h))

因此

y(t+h)y(t)hy(t+h2)k=f(t+h2,12(y(t)+y(t+h)))

因為隱式方法的時間對稱性,局部誤差中h的偶次項都消去了,局部誤差的階數是\𝒪(h3)

相關條目

腳註

Template:Reflist

參考資料

Template:常微分方程数值方法