ロンバーグ積分

提供: testwiki
ナビゲーションに移動 検索に移動

ロンバーグ積分[1][2](ロンバーグせきぶん、Romberg integration[3][4])またはロンベルク積分は、関数数値積分アルゴリズムのひとつである。この方法では台形公式リチャードソンの補外を組み合わせ離散化幅 h をゼロとする極限として数値積分を評価する。他の数値積分法に比べ、少ない回数の被積分関数の評価によって高精度の結果が得られる。

1955年にテンプレート:仮リンクによって考案された[5]

概要

ロンバーグ積分は区間 [a,b] で定義された関数 f の定積分 テンプレート:Indent を数値的に求めるアルゴリズムである。積分区間 [a,b] を幅 h=(ba)/NN 個の小区間 [xi,xi+1] (xi=a+ih, i=0,1,,N1) に分割するとき, 数値積分アルゴリズムのひとつである台形公式は求める定積分を テンプレート:Indent により近似する[6][7]。台形公式による値 T(h) と真の定積分の値の差は 𝒪(h2) であるが、オイラー・マクローリンの和公式(オイラーの和公式)によりそれをより詳しく評価することができる。すなわち、fC2m+2-級関数であるならば テンプレート:Indent テンプレート:Indent2 テンプレート:Indent2 テンプレート:Indent2 が成立する[8][9]。ここに B2kベルヌーイ数 であり、ξ(h)a<ξ(h)<b を満足するある数である。それ故に台形公式を h に関する漸近級数と見るとき、誤差項としては h の偶数次の項だけが現れる[10]。そこで複数の h について台形公式を適用し、それらの結果について誤差項を打ち消すようにリチャードソンの補外を行うことで、より精度の高い定積分の評価が得られる。これがロンバーグ積分である[3][4]

アルゴリズム

ロンバーグ積分のアルゴリズムは以下のように記述される[3]

  1. いくつかの幅 h0, h1=h0/N1, ..., hm=h0/Nm に対して台形公式を適用することにより定積分の近似値 T0,0=T(h0), ..., Tm,0=T(hm) を求める.
  2. 次の漸化式(ネヴィルのアルゴリズム
    Ti,k=Ti,k1+Ti,k1Ti1,k1[hikhi]21
    により帰納的に Ti,k を計算し、得られた Tm,m が求める補外値を与える。

h0,,hm としては、ロンバーグ[5]テンプレート:Indent を用いていたが、Roland Bulirschは次数が急激に増加し計算コストが増大することを抑えるために テンプレート:Indent を提案している[11][12]

補外ステップにおいてリチャードソン補外テーブルの各項の差分に基づいて積分の収束性を判定することで、計算をどこまで進めればよいか判定することも可能である[13][14]

特徴

ロンバーグ積分 Ti,k の誤差は、評価に用いたステップ hik,,hi から 𝒪(hik2hik+12hi2) と見積もられる[15]。特に hi をロンバーグの提案に従って選ぶときには誤差の厳密な評価 テンプレート:Indent が得られている[15]

h2=h1/2 に選ぶとき、リチャードソン補外において現れる T2,1T3,1シンプソンの公式によって問題の定積分を評価した値に一致する[12]。その意味で、より多くの積分幅 h での評価を行うことはニュートン・コーツの公式において積分公式を拡張することに、漸化式を解き補外を行うことは積分の次数を上げることに対応していると解釈できる[12]

Press らは著書「Numerical Recipes in C」においてロンバーグ積分が異なる次数の数値積分法を組み合わせた一般的な方法であることから数値積分においてこの方法を用いることを強く推奨している[16]。特に、被積分関数が積分区間において十分に滑らかであれば、ロンバーグ積分はニュートン・コーツ型の積分公式に比べて極めて少ない回数の被積分関数の評価だけで十分な精度の結果を与える[17]

なお、ネヴィルのアルゴリズムはラグランジュ多項式による補外であるが、有理関数補外を行うこともでき、この場合ロンバーグ積分における漸化式は テンプレート:Indent へと変更される[18]

具体例

次の定積分をロンバーグ積分により求めることを考える[19]テンプレート:Indent 積分ステップとして h0=1, h1=1/2, h2=1/4 を取り補外を行う。その結果、次の表に示すようにロンバーグ積分によって正確な積分値を得ることができる。

ロンバーグ積分におけるリチャードソン補外[19]
h0=1 T0,0=0.500000=12
h1=1/2 T1,0=0.265625=1764 T1,1=0.187500=316
h2=1/4 T2,0=0.192383=1971024 T2,1=0.167969=43256 T2,2=0.166667=16

ライブラリ

C言語により実装されているオープンソースの科学技術計算ライブラリGNU Scientific Library (GSL) にはロンバーグ積分を行う関数が含まれている[20]。また、Pythonの数値解析ライブラリSciPyにはロンバーグ積分により数値積分を行う scipy.integrate.romberg および scipy.integrate.romb というふたつの関数がある[21][22].

脚注

テンプレート:Reflist

参考文献

関連項目

  1. テンプレート:Cite web
  2. テンプレート:Cite web
  3. 3.0 3.1 3.2 Stoer & Bulirsch, p. 161.
  4. 4.0 4.1 Press et al., p. 140.
  5. 5.0 5.1 引用エラー: 無効な <ref> タグです。「Romberg1955」という名前の注釈に対するテキストが指定されていません
  6. Stoer & Bulirsch, p. 148.
  7. Press et al., p. 133.
  8. Stoer & Bulirsch, p. 160.
  9. Press et al., p. 141-142.
  10. Stoer & Bulirsch, pp. 160-161.
  11. 引用エラー: 無効な <ref> タグです。「Bulirsch1964」という名前の注釈に対するテキストが指定されていません
  12. 12.0 12.1 12.2 Stoer & Bulirsch, p. 163.
  13. Stoer & Bulirsch, p. 164.
  14. テンプレート:Cite book
  15. 15.0 15.1 Stoer & Bulirsch, p. 165.
  16. Press et al., p. 130.
  17. Press et al., pp. 140-141.
  18. Stoer & Bulirsch, pp. 164-165.
  19. 19.0 19.1 Stoer & Bulirsch, p. 162.
  20. テンプレート:Cite web
  21. テンプレート:Cite web
  22. テンプレート:Cite web