跳轉到內容

數值方法/初值問題求解

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

假設你得到了一個 ,其中 ,因變數,是自變數 的函式,並且給定了 。這是一個常微分方程的初值問題,因為它指定了初始條件和給出 的微分方程。問題是計算 點的值。求解這類問題存在各種各樣的數值方法。它們產生一個數值解,它只是一個值序列 ,對應於點

數值解是一個近似解。用 表示的真實解可能是

  • 無法得到,因為函式 f 可能不可積
  • 太難得到

無論如何,數值解給了我們一個基於已知資訊計算 的演算法。因此,人們可以編寫一個計算機程式來計算它。這就是模擬的基礎。

尤拉方法是最簡單的,它有點類似於數值地計算積分。在圖形上很容易看到發生了什麼。在每個點 x_n,你只是觀察導數告訴你的前進方向,然後朝那個方向邁出一小步。

尤拉顯式方法

[編輯 | 編輯原始碼]
  • ,其中h 是某個小的步長值。

Heun 二階或顯式梯形方法

[編輯 | 編輯原始碼]
  • ,其中h 是某個小的步長值。
  • .

示例

[edit | edit source]

現在我們將介紹一些使用該演算法的示例。

[edit | edit source]

假設我們也知道我們要使用 n=4 次迭代計算 f(1)。因此 h=1/4=.25。

  • x_0=0, y_0=5
  • x_1=.25, y_1=5+.25*f'(0,5)=5+.25*0=5
  • x_2=.5, y_2=5+.25*f'(.25,5)=5+.25*.25=5+.0625=5.0625
  • x_3=.75, y_3=5.0625+.25*f'(.5,5.0625)=5.0625+.25*.5=5.0625+.125=5.1875
  • x_4=1, y_4=5.1875+.25*f'(.75,5.1875)=5.1875+.25*.75=5.1875+.1875=5.375

所以我們完成了,我們知道 f(1)~=5.375。

我們透過積分知道精確解,y'=x,所以 y=x^2/2+c。在我們的例子中,為了計算 c,我們將 0 替換為 x,將 5 替換為 y,以看到 c=5。所以 f(1)=1^2/2+5 = 5.5。

誤差分析

[edit | edit source]

誤差只取決於函式的凹凸性(二階導數)。因此我們可以估計誤差為 O(x^2)。我們可以透過採用更小的步長來減少誤差。

龍格-庫塔方法

[edit | edit source]

龍格-庫塔方法是一系列演算法,特別適合於數值求解聯立微分方程組。

假設我們有一對聯立方程,形式為

,以及

,

我們希望對它們進行數值積分,相對於 t,步長為 。然後我們計算以下數量

然後分別增加 ,然後為下一步重新計算所有上述數量。

顯然,此方法可以擴充套件到三個或更多個聯立方程,誤差為 階。這種方法的高精度和易於實現使其成為一種流行的計算工具。

同樣有用的是, 可以在演算法的任何步驟之後更改,這允許處理變數的快速變化。

華夏公益教科書