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

1955年にヴェルナー・ロンベルク英語版によって考案された[5]

概要編集

ロンバーグ積分は区間   で定義された関数   の定積分

 

を数値的に求めるアルゴリズムである。積分区間   を幅    個の小区間   ( ,  ) に分割するとき, 数値積分アルゴリズムのひとつである台形公式は求める定積分を

 

により近似する[6][7]。台形公式による値   と真の定積分の値の差は   であるが、オイラー・マクローリンの和公式(オイラーの和公式)によりそれをより詳しく評価することができる。すなわち、  -級関数であるならば

 

 
 
 

が成立する[8][9]。ここに  ベルヌーイ数 であり、   を満足するある数である。それ故に台形公式を   に関する漸近級数と見るとき、誤差項としては   の偶数次の項だけが現れる[10]。そこで複数の   について台形公式を適用し、それらの結果について誤差項を打ち消すようにリチャードソンの補外を行うことで、より精度の高い定積分の評価が得られる。これがロンバーグ積分である[11][12]

アルゴリズム編集

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

  1. いくつかの幅  ,  , ...,   に対して台形公式を適用することにより定積分の近似値  , ...,   を求める.
  2. 次の漸化式(ネヴィルのアルゴリズム
     
    により帰納的に   を計算し、得られた   が求める補外値を与える。

  としては、ロンバーグ[5]

 

を用いていたが、Roland Bulirschは次数が急激に増加し計算コストが増大することを抑えるために

 

を提案している[14][15]

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

特徴編集

ロンバーグ積分   の誤差は、評価に用いたステップ   から   と見積もられる[18]。特に   をロンバーグの提案に従って選ぶときには誤差の厳密な評価

 

が得られている[19]

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

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

なお、ネヴィルのアルゴリズムはラグランジュ多項式による補外であるが、有理関数補外を行うこともでき、この場合ロンバーグ積分における漸化式は

 

へと変更される[24]

具体例編集

次の定積分をロンバーグ積分により求めることを考える[25]

 

積分ステップとして  ,  ,   を取り補外を行う。その結果、次の表に示すようにロンバーグ積分によって正確な積分値を得ることができる。

ロンバーグ積分におけるリチャードソン補外[26]
   
     
       

ライブラリ編集

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

脚注編集

  1. ^ ロンバーグ積分”. 2021年1月18日閲覧。
  2. ^ ROMBGS/D (ロンバーグ積分)”. 2021年1月18日閲覧。
  3. ^ Stoer & Bulirsch, p. 161.
  4. ^ Press et al., p. 140.
  5. ^ a b Romberg, W. (1955). “Vereinfachte numerische Integration”. Det Kongelige Norske Videnskabers Selskab Forhandlinger (Trondheim) 28 (7): 30–36. 
  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. ^ Stoer & Bulirsch, p. 161.
  12. ^ Press et al., p. 140.
  13. ^ Stoer & Bulirsch, p. 161.
  14. ^ Bulirsch, Roland (1964). “Bemerkungen zur Romberg-Integration”. Numerische Mathematik 6 (1): 6–16. doi:10.1007/BF01386048. ISSN 0029-599X. 
  15. ^ Stoer & Bulirsch, p. 163.
  16. ^ Stoer & Bulirsch, p. 164.
  17. ^ Dahlquist, Germund; Björck, Åke (2008). Numerical Methods in Scientific Computing, Volume I. Society for Industrial and Applied Mathematics. p. 551. doi:10.1137/1.9780898717785. ISBN 978-0-89871-644-3 
  18. ^ Stoer & Bulirsch, p. 165.
  19. ^ Stoer & Bulirsch, p. 165.
  20. ^ Stoer & Bulirsch, p. 163.
  21. ^ Stoer & Bulirsch, p. 163.
  22. ^ Press et al., p. 130.
  23. ^ Press et al., pp. 140-141.
  24. ^ Stoer & Bulirsch, pp. 164-165.
  25. ^ Stoer & Bulirsch, p. 162.
  26. ^ Stoer & Bulirsch, p. 162.
  27. ^ Numerical Integration - GSL 2.6 documentation”. 2021年1月18日閲覧。
  28. ^ scipy.integrate.romberg - SciPy v1.6.0 Reference Guide”. 2021年1月18日閲覧。
  29. ^ scipy.integrate.romb - SciPy v1.6.0 Reference Guide”. 2021年1月18日閲覧。

参考文献編集

関連項目編集