1. 程式人生 > >數值積分心得

數值積分心得

數值積分在科學計算中具有十分重要的地位,許多複雜函式的不定積分並沒有閉合形式或難以求解,比如高斯函式。這類問題均可以表示成黎曼積分的形式 – 即數值積分。考慮如下定積分 ,我們將其分成N小段(不一定均勻),即 [x0,x1], [x1,x2], [x2,x3] … [x_(n-1),x_n],再對每一個區間進行取樣,得到c0,c1,…,c_(n-1)。這樣的即稱為黎曼和。若定義最長的小段,黎曼積分告訴我們,如過最長的小段趨近於零,黎曼和的值也趨近於定積分的值。可見,黎曼積分是我們學過的對區間進行等寬分割的近似積分的推廣,其好處是,能讓我們對不同的子區間定義不同的積分函式,並採取不同的步長。這也就是數值積分的一般形式。例如,一個函式在一部分十分平滑,另一部分波動極大。由於更精確的積分方法往往需要更大的計算量,對於平滑的部分我們可以採取中點法,對於波動大的部分可採用更精確的cubic spline進行擬合。根據拉格朗日中值定理,對於定積分

,一定存在使得。如何選取一個更合理的,(這裡的不一定是一個值,也可以等效為一個過程,因為我們的擬合可以推廣到二次以上), 使得儘量接近 就是數值積分控制誤差的關鍵。

直覺上來說,取區間中點比取區間兩端誤差要更小。為了證明這一點,我們可以在[x_i,x_(i+1)]段上對積分函式關於進行泰勒級數展開。很容易得到 . 代入積分公式並令小段的長度為h, 可得=)我們希望儘可能的減小誤差,即儘量使低階項的係數為0。觀察上式,如果取, 則可使, 得到誤差項, 即O的誤差。如果取 或 ,只能得到O誤差。需注意,這只是小段誤差,對於整段區間,段數N=(b-a)/h, N個小段累計誤差就會升一個檔次。對於取中點的情況,合成誤差仍為O

.

另外,與其取一個點,我們可以用插值的方法來近似小段上的函式值。若為線性,即能得到梯形法則(trapezoidal rule),即. 可以證明,梯形法則的合成誤差也是O, 但是常數為中點法的兩倍。可以嘗試如此理解,如果函式是單調凹函式或凸函式,梯形法則會一直低估或高估積分值。但是,在周期函式如正弦波的情況下,梯形法則的誤差極小。所以還是要具體情況具體分析,選擇最佳的積分方法。

增加插值點,我們就會得到Simpson法則 – 將函式擬合為二次曲線。根據拉格朗日插值公式,就可以推出。可見Simpson法則的誤差極小,合成之後僅為O。但是,Simpson法則要求等寬區間,一定程度上限制了我們的應用範圍。而且,Simpson法則把函式當作二次曲線來擬合。如果原函式不光滑,甚至在一些點上不可導,Simpson法則的結果就會呈現極大的不穩定性。 Simpson和梯形法則其實是Newton-Cotes 系積分法在二次和一次上的形式。往上推廣,還有三次的Simpson 3/8 

法則和四次的Boole法則。它們的誤差更小,但是運算量也隨之增加。

前面說到求黎曼積分可以分段用不同的方法,其實,還有一種更方便更精確的Romberg積分, 其核心思想就是“插空”。例如,我們把中點法寫作, 其中就是中點法在取n段時的積分值。假設我們剛好又得到了一組取樣密度是原函式兩倍的資料,同樣運用中點法,得到 如果有這樣兩組結果,我們便可以對兩個式子進行線性組合,把低階項消去 - 將二式乘上四倍減去一式,就能得到, 一下子把誤差降了一個數量級。通過Romberg積分,我們不僅能把不同的積分方法結合起來,還能在運算的過程中得到誤差估計 (如果被積函式的高階導數難以求出)。例如,在每一遍迭代中都將取樣密度增加一倍,這樣我們不僅能夠結合通過上一遍的積分值迅速減少誤差,又能通過計算兩遍Romberg積分的差值來判斷是否滿足停止條件。

以上講的數值積分方法,在微分方程的數值求解上也是一個很重要的方法。下面幾篇文章中,我們還會講到一些數值求解微分方程和矩陣方程的方法,以便我們更好的求解金融工程裡的Black-Scholes公式。