資源
一個 微分方程 是一個將某個函式與其導數聯絡起來的方程。這種關係通常存在於動態系統建模中,其中一個量的變化率受另一個量的影響,該量可以是其他量的函式。因此,微分方程通常用於在許多學科中數學地表示這些關係,包括工程、物理學、經濟學和生物學。我們將重點關注常微分方程,它不涉及偏導數。
微分方程的解是滿足該方程的函式或函式集。一些具有明確公式的簡單微分方程可以透過解析方法求解,但我們始終可以使用數值方法使用計算機以一定精度來估計答案。
http://martinfowler.com/bliki/TwoHardThings.html "計算機科學中的兩件難事:快取失效、命名事物和 off-by-one 錯誤。"
一階微分方程的一般形式:
或
。解包含一個任意常數(積分常數),因為
滿足所有微分方程
滿足。使用輔助條件,例如 y(a)=b,我們可以解出 y'=F(x, y)。這被稱為 初始值問題。
函式
的不定積分是一類函式
,使得
。不定積分也稱為反導數。函式在固定區間上的定積分是一個數字。
計算積分
是要找到一個
滿足條件
,
。換句話說,積分可以用來解出具有初始條件的微分方程。
尤拉方法的示意圖。未知曲線為藍色,其多邊形近似為紅色。
尤拉方法 使用逐步方法來解決具有初始條件的常微分方程。
給定
和
(
是自變數,
是因變數) 尤拉方法求解
對於
.
尤拉方法可以透過多種方式推匯出來。讓我們看看一個地理描述。
鑑於在特定點
,我們可以用
來近似
。導數表示
在
處的瞬時(連續發生)變化。

在
上的平均變化是
,
它表示變化的離散形式(隨時間的“步長”變化)。如果
的變化足夠小,則兩者中的任何一個都可以用來近似另一個。
假設我們知道未知曲線的導數函式,並想找到曲線的形狀(滿足微分方程的函式)。我們可以從一個已知點開始,使用微分方程作為公式來獲得曲線上任意點的切線的斜率,並沿著該切線走一小步,直到下一個點。如果步長足夠小,我們可以預期下一個點會靠近曲線。如果我們假裝該點仍在曲線上,就可以使用相同的方法來找到下一個點,以此類推。在圖形上,我們使用多項式來近似未知曲線。兩條曲線之間的間隙代表近似的誤差,可以透過縮短步長來減少誤差。
我們剛剛推匯出尤拉方法的公式

給定
和
,求解
為 1 時,即 y(1) 的解。
尤拉方法的公式是遞迴定義的函式,可以迭代計算。
稱為步長。如果我們選擇 1 的步長,則解如下
方程
的數值積分圖示。藍色是尤拉方法;綠色是 中點法;紅色是精確解,
步長為 h = 1.0。
 |
 |
 |
|
| 0 |
0 |
1 |
1
|
| 1 |
1 |
2 |
2
|
| 2 |
2 |
4 |
4
|
| 3 |
3 |
8 |
8
|
推導尤拉方法的另一種方法是使用
周圍的泰勒展開

如果我們忽略高階導數項,就會得到尤拉方法公式

龍格-庫塔二階方法中的一種是 中點法,這是一種改進的尤拉方法(單步方法),用於數值求解常微分方程。
.
中點法的公式如下
.
請注意,
是使用此方法對
的近似值。
假設
等於精確值
中點法計算
,使得紅色絃線近似平行於中點處的切線(綠色線)。
龍格-庫塔四階方法通常被稱為“RK4”,“經典的龍格-庫塔方法”或簡稱“龍格-庫塔方法”。

其中 i = 0, 1, 2, 3, . . . ,使用

該方法透過將
加上四個增量的加權平均值來計算
,每個增量都是步長
乘以估計的斜率。
是基於區間開始時的估計斜率的增量(尤拉方法);
是基於區間中點時的斜率的增量;
又是基於區間中點時的斜率的增量,但是現在使用
;
是基於區間結束時的斜率的增量,使用
。
在對四個增量進行平均時,給中點時的增量更大的權重。權重的選擇方式是,如果
與
無關,則微分方程等效於一個簡單的積分。
來源
iPython 筆記本中的解決方案