对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,注意这不是巧合!

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