Try   HackMD

Runge-Kutta Methods

介紹

在數值分析領域中,Runge-Kutta 法是用於求出非線性常微分方程式近似解的一種系列方法。它由兩位德國數學家 Carl Runge 和 Martin Kutta 大約西元 1900 年發明出來的。RK 法有分階層,最常使用的是二階 RK 法簡稱 RK2 以及四階 RK4。

它們的算法都是透過迭代法來實現,RK2 相比 RK4 可以計算的比較快,但相對精準度就沒有 RK4 來的高,所以都是依據情況來決定要使用甚麼方法。

前即提要

常微分方程式

在深入講解 RK 法之前我們要先建立一些基本知識,首先常微分方程式(Ordinary Differential Equations,ODEs),它是微分方程式的一種。
常微分方程式會有以下要素:

  1. 未知數
    x
  2. 未知函數
    y=f(x)
  3. 未知函數的導函數
    y(n)=f(n)(x)nN

那個

n 代表微分階數

微分方程式之下除了常微分方程式之外,還有另外一種叫偏微分方程式(Partial Differential Equations,PDEs)

分辨這兩個方程式很簡單:常微分方程式指涉及到一個自變數的導數,而偏微分方程式涉及到多個自變數的導數。

導數(Derivative)與微分(Differential)的差別:微分是指運算,類似加法或乘法;導數指的是結果,例如

f(x)、且導數可以是常數或者是函數(導函數)。

Euler Method

Euler Method 跟 RK 法一樣都是用來求常微分方程式近似解會使用的方法,只是它只有用一階而已,對於非線性的函式來說精準度相當的不夠,但它的觀念是數值分析中最基本。

假設我們有一個微分方程:

y(t)=f(t,y(t)),y(t0)=y0。Euler Method 中會有一個變數
h
來代表時間步伐,所以說:
tn+1=tn+h

然後我們可以得到時間

tn+1 的近似值:
yn+1=yn+hf(tn,yn)

Runge-Kutta

RK2

由於 Euler Method 的誤差會很不精確,所以 RK2 它的方法是取兩個點上的斜率,最後平均後再推算。先看一下它的公式:

yn+1=yn+hKK=12(K1+K2)K1=f(tn,yn)K2=f(xn+h,yn+hK1)

RK2 的觀念就是:從已知點

P0(x0,y0) 和其斜率
K1
可以推出新點
P1(x1,y1)
,透過這個新點推算出的斜率
K2
,來跟剛剛的
K1
求斜率平均值後得
K
,即可從點
Pn
和斜率
K
來推算點
Pn+1
,這樣的計算方式會比 Euler Method 更加的精準。

RK4

基本上就是算四階,會更加精準但相對計算步驟變多了:

yn+1=yn+hKK=16(K1+2K2+2K3+K4)K1=f(tn,yn)K2=f(tn+h2,yn+h2K1)K3=f(tn+h2,yn+h2K2)K4=f(tn+h,yn+hK3)

注意這裡的

K2 計算方式跟 RK2 的不同哦!

應用

有一個未知的函數

y(x),其導函數為
y(x)=f(x,y(x))=2y(x)+3e4x
,目前已知
y(0)=1
,求
y(0.1)
是多少?

RK2

設定步長

h=0.1,我們先求
K1

K1=f(0,1)=21+3e40=2+3=1

接著求
K2

K2=f(0+0.1,1+0.11)=f(0.1,1.1)=21.1+3e40.1=2.2+2.01096014=0.18903986

接著求
K

K=12(K1+K2)=12(10.18903986)=0.40548007

最後算出
yn+1

yn+1=yn+hK=1+0.10.40548007=1.04054801

答案:

y(0.1) 近似解是
1.0405

RK4

懶的算了 XD
透過程式算出來

y(0.1) 應該會是
1.04134

tags: 數值分析