区分求積法,台形公式からの類推で「より次数の高い関数で近似できた方が誤差が減少する可能性があるのではないか?」と考えられる.つまり,一定(区分求積法),そして直線(台形公式)の次は,2次関数である.以下の図に示すように2次関数を表現する場合には3点を利用する必要があり,2つの区分を利用する必要がありそうである.
ここで,3点を
ここで,
さて,ここで式(
ニュートン・コーツ(Newton-Cotes)法の定義は以下のとおりである.
ここで
ここで3点,つまりシンプソン則は
例えば
ここで
最終的に,区間内の積分は,2次関数の近似で求めた積分と同じになる.
区分求積法や台形公式と同様に,シンプソン公式にもテイラー展開による評価を行おう.
まず例によって,元の関数をテイラー展開後に積分した積分値これらを係数を合わせて総合すると以下のようになる
区分の誤差は
プログラムを確認すると,区分求積法や台形公式との違いは,14-17行の4行である(別途f2などの定義は加えているが).このプログラムも積分区分が両端が重複するので,より効率的にプログラムを作成できる.興味のある学生さんは効率化を試みてみると良い.
program simpson_rule implicit none integer i, j, n double precision a, b, h, s, s_exact, x, f0, f1, f2 a = 0.0 b = 5.0 s_exact = 125.0 do i=1,6 x = 0.0 s = 0.0 n = 2**i h = (b-a)/n do j=0,n/2-1 f0 = 3.0*x**2 f1 = 3.0*(x+h)**2 f2 = 3.0*(x+2*h)**2 s = s+h/3.d0*(f0+4*f1+f2) x = x+2*h end do print *, n, abs((s-s_exact)/s_exact) end do end program
実行結果を以下に示す.驚くことに全ての分割数で誤差がゼロである.これはシンプソン公式自身が2次関数を構築するようにできており,積分対象が2次関数の場合は数値解と解析解は一致する(さらに驚くことに3次関数でも誤差はゼロとなる.解析解と数値解の誤差か中点
2 0.0000000000000000 4 0.0000000000000000 8 0.0000000000000000 16 0.0000000000000000 32 0.0000000000000000 64 0.0000000000000000
これでは面白くないので,4次関数である 2 4.1666666666666713E-002 4 2.6041666666667151E-003 8 1.6276041666671518E-004 16 1.0172526041715172E-005 32 6.3578287779819223E-007 64 3.9736429898766802E-008
これまでと同様にGnuplotによって誤差と分割数の関係を見てみよう.新たに