台形公式の考え方は簡単であるが,精度はあまりよくない.そこで,よく似た考え方で精
度が良いシンプソンの公式を説明する.台形公式は,分割点の値を一次関数(直線)で近似
を行い積分を行った.要するに折れ線近似である.ここで,1次関数ではなく,高次の関
数で近似を行えばより精度が上がることは,直感的に分かる.
2次関数で近似を行うことを考える.2次関数で近似するためには,3点必要である.3つの
分点をそれぞれ,
とする.そして,この2次関数を
と
する.
はラグランジュ補間に他ならないので,
となる.図
3に示すとおりである.
図 3:
元の関数を区間
を2次関数で近似する
|
これを,区間
で積分する.紙面の都合上,式
(11)の右辺を各項毎に積分を行う.まず,右辺第1項で
あるが,それは以下のようになる.
同様に,第2,3項を計算すると
式(11)右辺第2項の積分 |
 |
(12) |
式(11)右辺第3項の積分 |
 |
(13) |
となる.以上より,近似した2次関数

の範囲
![$ [x_j,\,x_{j+2}]$](img35.png)
の積分は,
となる.
これは,ある区間
の積分で,その巾は
である.区間
にわ
たっての積分
は,式(15)を足し合わせればよい.ただし,
と足し合わせる.
これが,シンプソンの公式と呼ばれるもので,先ほどの台形公式よりも精度が良い.誤差
は,

に比例する.分割数

を10倍にすると,誤差は

程度にになること
が期待できる.
注意シンプソンの公式を使う場合,分割数
は偶数でなくてはならない.これに
注意して,プログラムを作成しよう.
実際にシンプソンの公式を使って数値積分を行う場合,台形公式を上手に使う.台形公式からど
うやってシンプソンの公式を計算するのか?--という驚きの疑問が湧くだろう.それをこ
れから示す.ここでは,基礎となる計算のアルゴリズムとフローチャートを示す.ここの
お話は,主に文献 [
1]を参考にした
2.
区間
![$ [a,b]$](img47.png)
を

等分して関数

を数値積分する.この場合の台形公式とシンプソンの公式
を比較する.比較しやすくするために,台形公式(
4)とシンプソンの公式
(
16)を少し書き直す.
これから,面白いことに気がつくだろう.どちらも,関数の値を計算するポイントは

個
である.しかし,計算された値の加算の方法が異なる.そのようすを図
4にしめす.加算の方法が異なるだけで,台形公式の精度は
2次,シンプソンの公式は4次になる.
図4や式(17)や(18)を見
ると台形公式とシンプソンの公式はよく似ており,なんらかの関係があることは容易に推
測がつく.それらの関係を考えることにする.区間
を
で分割して,数値積
分を行うとする.この時の台形公式の結果を
,シンプソンの公式の結果を
とす
る.すると,それらには,
の関係がある.これは,次のように右辺を計算すれば簡単に証明できる.これを計算する
ために,

や

のときのステップ幅を

とする.こうする
と,

のときのステップ幅は

となる.これを利用すると,右辺は
となる.
これまでの結果から,
と
に分割したときの台形公式の積分の値が分
かると,
のときのシンプソンの公式での積分値が計算できると言える.式
(19)のとおりである.しかし,式(18)を
直に計算する方法とどれほどのメリットがあるのだろうか?--という疑問も湧くだろう.
これだけだと,少し計算が早いかもしれないが,それほど大きなメリットはない.ただ,
台形公式と比べると,大変大きなメリットがある.台形公式とほとんど同じ計算で,シン
プソンの公式の精度が得られるのである.ロンバーグ積分まで考えると,さらに大きなメ
リットが生じる.
図 4:
台形公式とシンプソンの公式の比較.関数の曲線の上が台形公式とシンプソ
ンの公式で積分を計算するとき重み.下:台形公式 上:シンプソンの公式.
|
シンプソンの公式で数値積分を行う場合,式(
18)を計算しても良いが,
台形公式を使う漸化式(
19)を使うことを勧める.台形公式
からシンプソンの公式の値を求めるには,次のような手順で計算する.ただし,計算精度
は

とする.
- 区間の区切りを
として台形公式で積分
を計算する.計算結果は,
とする.
- 区間の区切りを
としてシンプソンの公式で積分
を計算する.計算結果
は
とする.
- 目的の精度に達するまで,以下を繰り返す.
の値を2倍にする.それにともない,ステップ幅
を半分にする.
|
 |
|
 |
|
(20) |
- 新しい台形公式の積分値を計算する.
|
 |
(21) |
|
 |
(22) |
- 新しいシンプソンの公式の積分値を計算する.
 |
(23) |
- 以下の条件を満たすならば,目的の計算精度に達したと判断して,繰り返
し文から脱出する.
 |
(24) |
- 目的の精度に達していなければ,
|
 |
|
 |
|
(25) |
として,最初から繰り返す.
- シンプソンの公式による数値積分の結果
を表示する.
ホームページ:
Yamamoto's laboratory著者:
山本昌志
Yamamoto Masashi
平成19年1月19日