對Rnuge-Kutta算法的理解

龍格-庫塔方法的特點

  • 每個龍格庫塔算法都能從泰勒方法推導出來
  • 它走的是折中路線,即走每一個步長都會提前進行若干次的函數值計算
  • 最常用的是N=4的Runge-Kutta 法
  • 需要微積分
    Z(x+x,y+y)=Z(x,y)+Zxx+Zyy Z(x+\bigtriangleup x,y+\bigtriangleup y)=Z(x,y)+\frac{\partial Z}{\partial x}\bigtriangleup x+\frac{\partial Z}{\partial y}\bigtriangleup y

詳細說明

以二階龍格庫塔算法爲例說明

第一點

s1=f(x(t),t)s_1=f(x(t),t)
s2=f(x(t)+1/2s1t,t+1/2t) s_2=f(x(t)+1/2s_1\bigtriangleup t,t+1/2\bigtriangleup t)
x(t+t)=x(t)+s2tx(t+\bigtriangleup t)=x(t)+s_2\bigtriangleup t

第二點

f(x,t)=ddtx(t)f(x,t)=\frac{\mathrm{d}}{\mathrm{d}t}x(t)
微分方程解的泰勒展開:
x(t+t)=x(t)+f(x,t)t+12d2xdt2t2+... x(t+\bigtriangleup t)=x(t)+f(x,t)\bigtriangleup t+\frac{1}{2}\frac{\mathrm{d^2}x}{\mathrm{d}t^2}\bigtriangleup t^2+...
其中二階項展開:
d2xdt2=ddtf(x,t)=ftf+ft \frac{\mathrm{d^2}x}{\mathrm{d}t^2}=\frac{\mathrm{d}}{\mathrm{d}t}f(x,t) =\frac{\partial f}{\partial t}f+\frac{\partial f}{\partial t}

第三點

推導過程:
f(x(t)+1/2s1t,t+1/2t)=f(x(t),t)+fx1/2f(x(t),t)t+ft1/2tf(x(t)+1/2s_1\bigtriangleup t,t+1/2\bigtriangleup t)=f(x(t),t)+\frac{\partial f}{\partial x}1/2f(x(t),t)\bigtriangleup t+\frac{\partial f}{\partial t}1/2\bigtriangleup t
=f(x(t),t)+1/2t(fxf(x(t),t)+ft) 上式=f(x(t),t)+1/2\bigtriangleup t(\frac{\partial f}{\partial x}f(x(t),t)+\frac{\partial f}{\partial t})
=f(x(t),t)+1/2t(fxf(x(t),t)+ft) 上式=f(x(t),t)+1/2\bigtriangleup t(\frac{\partial f}{\partial x}f(x(t),t)+\frac{\partial f}{\partial t})
=f(x(t),t)+1/2td2xdt2上式=\boldsymbol{f(x(t),t)+1/2\bigtriangleup t\frac{\mathrm{d^2}x}{\mathrm{d}t^2} } (龍格庫塔的核心思想)

核心思想:

把二階導數的表達式用一階導數“表示”出來,這意味着計算量減少(默認二階導數的計算量比一階大)但同時精度並沒有減少。

accuracy higher with less time
第四點

解釋一下s2s_2的係數爲什麼有個1/2,注意這不是巧合!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章