跳轉到內容

數值方法導論/常微分方程

來自華夏公益教科書,開放書籍,開放世界

資源

一個 微分方程 是一個將某個函式與其導數聯絡起來的方程。這種關係通常存在於動態系統建模中,其中一個量的變化率受另一個量的影響,該量可以是其他量的函式。因此,微分方程通常用於在許多學科中數學地表示這些關係,包括工程、物理學、經濟學和生物學。我們將重點關注常微分方程,它不涉及偏導數。

微分方程的解是滿足該方程的函式或函式集。一些具有明確公式的簡單微分方程可以透過解析方法求解,但我們始終可以使用數值方法使用計算機以一定精度來估計答案。

http://martinfowler.com/bliki/TwoHardThings.html "計算機科學中的兩件難事:快取失效、命名事物和 off-by-one 錯誤。"

初始值問題

[編輯 | 編輯原始碼]

一階微分方程的一般形式:。解包含一個任意常數(積分常數),因為 滿足所有微分方程 滿足。使用輔助條件,例如 y(a)=b,我們可以解出 y'=F(x, y)。這被稱為 初始值問題

函式 的不定積分是一類函式 ,使得 。不定積分也稱為反導數。函式在固定區間上的定積分是一個數字。

與積分的聯絡

[編輯 | 編輯原始碼]

計算積分 是要找到一個 滿足條件 。換句話說,積分可以用來解出具有初始條件的微分方程。

尤拉方法

[編輯 | 編輯原始碼]
尤拉方法的示意圖。未知曲線為藍色,其多邊形近似為紅色。

尤拉方法 使用逐步方法來解決具有初始條件的常微分方程。

給定 ( 是自變數, 是因變數) 尤拉方法求解 對於 .

尤拉方法可以透過多種方式推匯出來。讓我們看看一個地理描述。

鑑於在特定點 ,我們可以用 來近似 。導數表示 處的瞬時(連續發生)變化。

上的平均變化是

,

它表示變化的離散形式(隨時間的“步長”變化)。如果 的變化足夠小,則兩者中的任何一個都可以用來近似另一個。

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

我們剛剛推匯出尤拉方法的公式

示例

[edit | edit source]

給定 ,求解 為 1 時,即 y(1) 的解。

尤拉方法的公式是遞迴定義的函式,可以迭代計算。 稱為步長。如果我們選擇 1 的步長,則解如下

方程 的數值積分圖示。藍色是尤拉方法;綠色是 中點法;紅色是精確解, 步長為 h = 1.0。
0 0 1 1
1 1 2 2
2 2 4 4
3 3 8 8

推導尤拉方法的另一種方法是使用 周圍的泰勒展開

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

龍格-庫塔二階方法

[edit | edit source]

龍格-庫塔二階方法中的一種是 中點法,這是一種改進的尤拉方法(單步方法),用於數值求解常微分方程。

.

中點法的公式如下

.

請注意, 是使用此方法對 的近似值。

假設 等於精確值 中點法計算 ,使得紅色絃線近似平行於中點處的切線(綠色線)。

龍格-庫塔四階方法

[edit | edit source]

龍格-庫塔四階方法通常被稱為“RK4”,“經典的龍格-庫塔方法”或簡稱“龍格-庫塔方法”。

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

該方法透過將 加上四個增量的加權平均值來計算 ,每個增量都是步長 乘以估計的斜率。

  • 是基於區間開始時的估計斜率的增量(尤拉方法);
  • 是基於區間中點時的斜率的增量;
  • 又是基於區間中點時的斜率的增量,但是現在使用
  • 是基於區間結束時的斜率的增量,使用

在對四個增量進行平均時,給中點時的增量更大的權重。權重的選擇方式是,如果 無關,則微分方程等效於一個簡單的積分。

案例研究

[編輯 | 編輯原始碼]

來源

iPython 筆記本中的解決方案

華夏公益教科書